也做SQL查询:班级总成绩 前三名,总成绩有相等的情况
刚刚看到一篇博客,原帖链接:http://www.cnblogs.com/HCCZX/archive/2012/11/07/2758036.html
通常想到子查询或者临时表外加聚合函数都是没错的,但是真写起来发现SQL语句比较不那么人道,阅读体验不好。追求优雅的Coder通常一看到是SQL Server 2005+,条件反射地想到窗口函数和公用表表达式CTE。一种SQL查询实现如下:
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可读性是不是立刻变得简洁鲜明一目了然?
作者:Jeff Wong
出处:http://jeffwongishandsome.cnblogs.com/
本文版权归作者和博客园共有,欢迎围观转载。转载时请您务必在文章明显位置给出原文链接,谢谢您的合作。
浙公网安备 33010602011771号