也做SQL查询:班级总成绩 前三名,总成绩有相等的情况

本文介绍了一种使用SQL Server 2005+的窗口函数和公用表表达式(CTE)进行优雅查询的方法,通过具体示例展示了如何简洁地获取学生排名及成绩信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚刚看到一篇博客,原帖链接:http://www.cnblogs.com/HCCZX/archive/2012/11/07/2758036.html

 

通常想到子查询或者临时表外加聚合函数都是没错的,但是真写起来发现SQL语句比较不那么人道,阅读体验不好。追求优雅的Coder通常一看到是SQL Server 2005+,条件反射地想到窗口函数和公用表表达式CTE。一种SQL查询实现如下:

1
2
3
4
5
6
7
8
9
10
11
WITH  ScoreInfo AS  (
SELECT  [Student_No], [Student_Name],[Chinese],[Math],[English],[totalScore]
       ,DENSE_RANK() OVER( ORDER  BY  totalScore DESC ) AS  '名次'
   FROM  [Record] )
   
SELECT  CASE  名次  WHEN  1 THEN  '第一名'
                   WHEN  2 THEN  '第二名'
                   WHEN  3 THEN  '第三名'
                   END  AS  '排名' ,
[Student_No], [Student_Name],[Chinese],[Math],[English],[totalScore]
FROM  ScoreInfo WHERE   名次<4 --取前三名

这样的SQL可读性是不是立刻变得简洁鲜明一目了然?






本文转自JeffWong博客园博客,原文链接:http://www.cnblogs.com/jeffwongishandsome/archive/2012/11/07/2759485.html,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值