A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙琦 黑马帝   /  2012-2-28 21:50  /  2533 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙琦 于 2012-2-28 21:52 编辑

select top 3 * from Teacher where id not in(select top (count(*)-3) id from Teacher )

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

6 个回复

倒序浏览
count(*)是聚合函数结构是一条和id能查出来不确定条数的字段是不能一起查询的。

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 孙琦 于 2012-2-28 22:04 编辑
赵国梁 发表于 2012-2-28 21:58
count(*)是聚合函数结构是一条和id能查出来不确定条数的字段是不能一起查询的。 ...


当你不知道一个表中有多少条数据时,让你取出最后的三条或者几条,count(*) - 3不能用,你会怎么做?不考虑分页,
再说你就不是不考虑聚合函数,select top 7-3 * from Teacher,这样也是不行的

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
把表倒过来再去前三条top (3)

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 孙琦 于 2012-2-28 22:22 编辑
叶彦召 发表于 2012-2-28 22:13
把表倒过来再去前三条top (3)


难道仁兄有把表倒过来的功能,不要select top 3 from 【表名】 order by desc ,这样取出的不是最后三条

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
当然要了,这样才不会出错嘛,避免了count(*) - 3 就不会错了
另外:select top (7-3) * from Teacher也是可以的(加括号)

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
孙琦 黑马帝 2012-3-1 22:24:51
7#
擦,搞定了,分享下
--11.1取出这个表中的最后n条数据,并按倒序输出...
        Sql语句:
        select top 3 * from[表名] where id not in(select id from[表名] where id<=((select count(*) from [表名])-n)) order by [字段名] desc
   
        --11.2取出这个表中的中间n条数据的前m条,并按倒序输出...先取出在排序。
                select * from [表名]
                where id in
                {
                        select top m * from[表名] where id not in(select id from[表名] where id<=((select count(*) from [表名])-n))
                )
                order by [字段名] desc
               
        --11.3取出这个表中的中间n条数据的前m条,并按倒序输出...先排序在取出
                select top m * from[表名] where id not in(select id from[表名] where id<=((select count(*) from [表名])-n)) order by [字段名] desc

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马