小编典典

如何获得在每个学科中获得最高分的学生的名字?

sql

我有下表

 Name  |  Subject  | Marks
 --------------------------
 a        M          20
 b        M          25  
 c        M          30
 d        C          44 
 e        C          45
 f        C          46 
 g        H          20

在这里,我有一个“学生”表,我想
从该学生表中获取从每个学科获得满分的学生的姓名,例如以下输出。

 Name | Subject | Marks  
 c        M        30
 f        c        46
 g        h        20

阅读 213

收藏
2021-04-19

共1个答案

小编典典

您可以使用ROW_NUMBER函数仅返回每个主题的“最佳”行:

SQL小提琴

MS SQL Server 2008架构设置

CREATE TABLE Student
    ([Name] varchar(1), [Subject] varchar(1), [Marks] int)
;

INSERT INTO Student
    ([Name], [Subject], [Marks])
VALUES
    ('a', 'M', 20),
    ('b', 'M', 25),
    ('c', 'M', 30),
    ('d', 'C', 44),
    ('e', 'C', 45),
    ('f', 'C', 46),
    ('g', 'H', 20)
;

查询1

SELECT Name, Subject, Marks
FROM(
  SELECT *, ROW_NUMBER()OVER(PARTITION BY Subject ORDER BY Marks DESC) rn
    FROM dbo.Student
)X
WHERE rn = 1

结果

| NAME | SUBJECT | MARKS |
--------------------------
|    f |       C |    46 |
|    g |       H |    20 |
|    c |       M |    30 |
2021-04-19