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

新手上路,请多包涵

我有下表

 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

原文由 Chintu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

您可以使用 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 |

原文由 Sebastian Meine 发布,翻译遵循 CC BY-SA 3.0 许可协议

通过使用 GROUP BY 和 Have 子句,您可以使用简单的 sql 查询来查找每个主题中的最高分

SELECT Name, Subject, Marks from Student GROUP BY (Subject) HAVING Marks=max(Marks);

原文由 Anshu Bhagat 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进