我有下表
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
您可以使用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 |