SQL ROW_NUMBER() 的应用:分组之后再取前几行
来源:互联网 发布:半自动覆膜机分切数据 编辑:程序博客网 时间:2024/05/20 06:52
题目要求: 查询各科成绩前三名的记录
有一下表,
SC(S#,C#,Score)成绩表:S# 学号,C# 课程号,Score 分数.
Course(C#,CName,T#) 课程:C# 课程号,CName 课程名称,T# 老师号.
sql语句:
Method1:
SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数
FROM SC t1
WHERE score IN (SELECT TOP 3 score
FROM SC
WHERE t1.C#= C#
ORDER BY score DESC
)
ORDER BY t1.C#;
因为不同的课程号,可以对应相同的课程.按照这样的需求,上面的结果就有点问题.没有考虑到这种情况.
Method 2:
SELECT S#,SCORE,CNAME FROM (
SELECT SC.S#,SC.SCORE,CNAME,row_number() over (partition by CNAME ORDER BY SCORE DESC) AS ROWINDEX FROM SC,COURSE C
WHERE SC.C#=C.C#
GROUP BY SC.S#,SC.SCORE,CNAME) AS A
WHERE ROWINDEX<=3
这种方法考虑到了不同的课程号,对应相同的课程.其中用到了row_number 方法:
语法:
ROW_NUMBER() OVER ([<partition_by_clause>] <order_by_clause>)
说明:返回结果集分区内行的序列号,每个分区的序列号从1开始.
备注: ORDER BY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序.
参数:<partition_by_clause>:将FROM子句生长的结果集划入应用了ROW_NUMBER函数的分区.
<order_by_clause>:确定将Row_Number值分配给分区中的行的顺序.
返回类型:bigint
----
- SQL ROW_NUMBER() 的应用:分组之后再取前几行
- sql 分组后按时间降序排列再取出每组的第一条记录
- 对于除法之后再取余数的处理:
- sql 分组后排名,ROW_NUMBER()OVER()函数的使用
- sql server ROW_NUMBER (Transact-SQL) 分组查询
- sql 分组取最新的数据sqlserver巧用row_number和partition by分组取top数据
- Sql 里面 ROW_NUMBER 应用场景
- 在论坛中出现的比较难的sql问题:3(row_number函数 分组查询)
- SQL中先分组再组内排序再输出的ROW_NUMBER() OVER(partition by..order by..)
- ROW_NUMBER() 的实际应用
- sql row_number的用法
- SQL ROW_NUMBER() 的用法
- Hive的分组排序方法-row_number
- [SQL]-Oracle分组函数ROULLUP的应用
- MySQL分组后进行计算,计算后再取最新值或最旧值的超简捷写法
- 在论坛中出现的比较难的sql问题:4(row_number函数+子查询 分组连续编号问题)
- oracle row_number() 函数的应用
- oracle的 row_number() over()应用
- Testpassport 642-655 题库(一部分)
- [热点关注]UT-S3C2450
- 数据库表间数据复制
- QTP参数化
- RTSP协议与HTTP协议
- SQL ROW_NUMBER() 的应用:分组之后再取前几行
- PKU 2352 Stars
- 大型网站性能优化 一 C#高效编码的优化 系统
- typedef 的优点
- 我的想法、我的建言
- 中国外包企业战略思考
- 如何编译/交叉编译内核模块, Linux 2.6.
- sqlserver 批量增加数据
- 构架、框架、设计模式之间的关系简述