博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL分页 查询6到10名等
阅读量:3932 次
发布时间:2019-05-23

本文共 867 字,大约阅读时间需要 2 分钟。

例如:按总学分降序排列,查询排名第6到第10的学生信息

  • 我们先来看一下学分降序排列后的前十名
select top 10 *from studentorder by tot_cred desc
  • 查询结果:

这里写图片描述

常见错误

select top 10 *from studentorder by tot_cred descexceptselect top 5 *from studentorder by tot_cred desc
  • 这样写是会报错的,至少SQL Server 2012不支持

    这里写图片描述

  • 可能的原因:order by之后得到的结果集是有序的,except是集合差运算,而集合内的元素是无序的。所以SQL Server 2012应该认为:关键字except前后都是有序集,应该不是集合。不是集合却用集合差运算,然后就报错了。

方法一

with a as(select top 10 *from studentorder by tot_cred desc),b as(select top 5 *from studentorder by tot_cred desc)select *from a exceptselect *from b;
  • 将上述错误改正一下即可:用with建两个临时表,然后再取差集,运行结果如下:
    这里写图片描述

方法二

with c as(select *,row_number() over(order by tot_cred desc ) total from student)select * from c where total>=6 and total<=10
  • 查询结果:

    这里写图片描述

  • 可能有小伙伴不太懂,我们先来看一下临时表c里面都有什么:

with c as(select *,row_number() over(order by tot_cred desc ) total from student)select * from c
  • 查询结果:

    这里写图片描述

  • 由此可见,临时表c的作用是:按总学分降序排列后,给每一行编号,新增列的名字是 total

你可能感兴趣的文章
虚拟存储器--挖掘之七
查看>>
输入/输出技术--挖掘之八
查看>>
计算机可靠性--挖掘之九
查看>>
项目是什么
查看>>
项目与日常运行
查看>>
项目管理涉及的专门知识领域
查看>>
项目管理高级话题
查看>>
算法概述
查看>>
递归与分治策略
查看>>
动态规划策略
查看>>
项目的生命周期
查看>>
项目干系人
查看>>
组织的影响
查看>>
贪心算法
查看>>
项目管理过程
查看>>
项目管理过程组
查看>>
项目可行性的研究内容
查看>>
初步可行性研究
查看>>
详细可行性研究
查看>>
收益的预测和评估
查看>>