也做SQL查询:班级总成绩 前三名,总成绩有相等的情况-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

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

简介:

刚刚看到一篇博客,原帖链接: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,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: