VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 839|回复: 8

sql top 问题

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-12-14 13:00:01 | 显示全部楼层 |阅读模式
select top 30 班别,姓名,物理  where 班别>=  and  班别<= 22  from x order by  物理  desc; 找出记录为 33 这是正确的,因为有同样分数的同学,现时我还想对班别重新排序下,用 order by 物理 desc,班别 asc ,找出的记录只有30 条,那地方有问题?
回复

使用道具 举报

0

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-12-14 14:15:01 | 显示全部楼层
重复也应该只有30条啊
回复

使用道具 举报

0

主题

40

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-12-14 17:15:01 | 显示全部楼层
select all top 30 班别,姓名,物理  where 班别>=  and  班别<= 22  from x order by  物理  desc;
加一个关键字ALL
回复

使用道具 举报

0

主题

40

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-12-14 18:00:01 | 显示全部楼层
select top 30 WITH TIES 班别,姓名,物理  where 班别>=  and  班别<= 22  from x order by  物理  desc;

这样应该可以了
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-12-20 13:15:01 | 显示全部楼层
xclzc17兄,你那方法,我调试了但也不行。其实我最大的疑惑就是:为什么单一个order by  物理  desc 就会比order by  物理desc ,班别 asc 多记录?

回复

使用道具 举报

0

主题

40

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-12-21 10:45:01 | 显示全部楼层
也许是环境不一样吧
我用select top 30 WITH TIES  试过是可以的
回复

使用道具 举报

0

主题

4

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-12-21 16:30:01 | 显示全部楼层
where 跟 from 的顺序可以乱的吗?
回复

使用道具 举报

0

主题

40

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-12-21 16:45:01 | 显示全部楼层
呵呵,不好意思,拷贝上面的拷错了
回复

使用道具 举报

0

主题

13

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-12-22 09:15:01 | 显示全部楼层
1、请确认使用的数据库是sqlserver么?
2、在sqlserver中,如果按照楼主的写法,跟楼主的结果是不匹配的。sqlserver的top查询,默认是不带with ties的,所以top 30是不会返回33条数据的。我认为要得到33条数据,首先是查询时加上了with ties
3、关于使用排序后结果不同,那是正常的,你应该把两个查询都加上with ties进行对比。带top和order by的查询,你这个情况是先排序,后提取前n条数据。所以你加了排序条件后,在使用with ties的情况下,之前的排序位置可能重复的记录,现在就不是同一位置。自然就没有附加的数据返回。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表