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