SQL查询如何先取前n个记录,再对这前n个记录排序

lb1129 2017-10-25 10:43:54
比如查询s表的前5个记录,并根据k列的值进行降序排序,如果用下面语句:
select top 5 *
from s
order by k DESC
其查询结果是先把全部记录排序后再选前5个记录
所以标题所说操作要如何实现,我也试过先在第一个视图选取前n个,再在第二个视图对第一个视图进行排序,也是同样的结果
...全文
739 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 版主 2017-10-26
  • 打赏
  • 举报
回复
引用 12 楼 lb1129 的回复:
[quote=引用 11 楼 sinat_28984567 的回复:]
SELECT TOP 5
        *
INTO    #temp
FROM    s

SELECT  *
FROM    #temp
ORDER BY k DESC

DROP TABLE #temp

这个真的可以,谢谢你了[/quote] 记得结贴哦
lb1129 2017-10-26
  • 打赏
  • 举报
回复
引用 11 楼 sinat_28984567 的回复:
SELECT TOP 5
        *
INTO    #temp
FROM    s

SELECT  *
FROM    #temp
ORDER BY k DESC

DROP TABLE #temp

这个真的可以,谢谢你了
二月十六 版主 2017-10-26
  • 打赏
  • 举报
回复
SELECT TOP 5
        *
INTO    #temp
FROM    s

SELECT  *
FROM    #temp
ORDER BY k DESC

DROP TABLE #temp

lb1129 2017-10-26
  • 打赏
  • 举报
回复
引用 7 楼 sinat_28984567 的回复:
里边想随机排序吗?如果是哪样的话,试试这样
SELECT  *
FROM    ( SELECT TOP 5
                    *
          FROM      s
		  ORDER BY NEWID()
        ) t
ORDER BY k DESC


我感觉不难理解啊,并不是先随机排序,默认肯定有个顺序啊,大概是记录添加顺序
lb1129 2017-10-26
  • 打赏
  • 举报
回复
引用 8 楼 z10843087 的回复:
实际的意义不大,如果只从做题的角度,那么#2 楼的方法就可以。
二楼方法不行啊,上面不是截图对比了吗
OwenZeng_DBA 2017-10-26
  • 打赏
  • 举报
回复
实际的意义不大,如果只从做题的角度,那么#2 楼的方法就可以。
二月十六 版主 2017-10-26
  • 打赏
  • 举报
回复
里边想随机排序吗?如果是哪样的话,试试这样
SELECT  *
FROM    ( SELECT TOP 5
                    *
          FROM      s
		  ORDER BY NEWID()
        ) t
ORDER BY k DESC


lb1129 2017-10-26
  • 打赏
  • 举报
回复
引用 4 楼 z10843087 的回复:
[quote=引用 楼主 lb1129 的回复:] 比如查询s表的前5个记录,并根据k列的值进行降序排序,如果用下面语句: select top 5 * from s order by k DESC 其查询结果是先把全部记录排序后再选前5个记录 所以标题所说操作要如何实现,我也试过先在第一个视图选取前n个,再在第二个视图对第一个视图进行排序,也是同样的结果
个人感觉也是没什么意义呢,说说这么做的理由呢[/quote] 没什么特别意义,书本上的题目,老师要求做的,看题目的意思是这样
lb1129 2017-10-26
  • 打赏
  • 举报
回复
引用 2 楼 sinat_28984567 的回复:
SELECT  *
FROM    ( SELECT TOP 5
                    *
          FROM      s
        ) t
ORDER BY k DESC
感觉上是没问题的,但是一试发现还是先排序再选择。。。
OwenZeng_DBA 2017-10-26
  • 打赏
  • 举报
回复
引用 楼主 lb1129 的回复:
比如查询s表的前5个记录,并根据k列的值进行降序排序,如果用下面语句: select top 5 * from s order by k DESC 其查询结果是先把全部记录排序后再选前5个记录 所以标题所说操作要如何实现,我也试过先在第一个视图选取前n个,再在第二个视图对第一个视图进行排序,也是同样的结果
个人感觉也是没什么意义呢,说说这么做的理由呢
吉普赛的歌 版主 2017-10-26
  • 打赏
  • 举报
回复
第一次取 top 5 但不排序, 有何意义?
二月十六 版主 2017-10-26
  • 打赏
  • 举报
回复
SELECT  *
FROM ( SELECT TOP 5
*
FROM s
) t
ORDER BY k DESC
听雨停了 2017-10-26
  • 打赏
  • 举报
回复
你说的取s表的前5条记录,如果不排序怎么取出你说的前5条啊,按什么来定义前后啊

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧