分组排序取第一

MSSQL ningjian

案例:一门考试,每个人有三次考试机会,取分数最高的为最终成绩。

      列出所有人的最终成绩。

比如成绩如下表:

 

姓名

分数

张三

80

张三

90

张三

100

李四

70

李四

90

李四

80

王五

100

 

假如表名为:分数表

 

应该这样写:

第一步:分组,排序,序号

SELECT 姓名, 分数,

    ROW_NUMBER() OVER (PARTITION BY 姓名 ORDER BY 分数 DESC) AS 序号

FROM 分数表

 

结果如下:

姓名

分数

序号

张三

80

3

张三

90

2

张三

100

1

李四

70

3

李四

90

1

李四

80

2

王五

100

1

 

第二步,在结果表中再查:

 

SELECT  姓名, 分数 FROM (

    SELECT 姓名, 分数,

        ROW_NUMBER() OVER (PARTITION BY 姓名 ORDER BY 分数 DESC) AS 序号

    FROM 分数表

) AS vw

WHERE 序号= 1

 

内层查询,根据“姓名”分组,然后在分组内根据“分数”降序排列,给分组内每条记录一个序号。

发表评论:

验证码