提问人:Sunil 提问时间:5/28/2015 最后编辑:CœurSunil 更新时间:7/16/2017 访问量:441
SQL Server 分组依据子句并显示所有列 [已关闭]
SQL Server group by clause and display all columns [closed]
问:
我在:SQL Server
Id Name Grade Marks
1 ABC 8 150
1 DEF 9 200
2 GHI 10 180
2 JKL 8 155
3 MNO 9 150
3 PQR 10 200
我需要为每个 和 获取最高。
输出应如下所示:Marks
Grade
ID
Name
Id Name Grade Marks
2 JKL 8 155
1 DEF 9 200
3 PQR 10 200
这是我尝试过的
从 T1 中选择 Id、Name、Grade、Marks 其中的分数(按等级从 T1 分组中选择最大(分数))
这太不成熟了,以至于我不想在这里发布它,我不知道其他方法可以尝试它......
答:
0赞
Amir Pelled
5/28/2015
#1
select ID, Name, Grade, Mark
FROM (select ID, Name, Grade, Mark,
Row_number() over(partition by Grade order by mark desc) AS RN
From <Table> ) A
WHERE RN = 1
4赞
Giorgi Nakeuri
5/28/2015
#2
你可以像这样做:
;with cte as
(
select
*,
row_number() over(partition by Grade order by Marks desc) rn
from TableName
)
select * from cte where rn = 1
评论
0赞
Christian Barron
5/28/2015
这在我看来是正确的,所以我已经接受了。
0赞
t-clausen.dk
5/28/2015
对不起,误读了这个问题。我会改变我的反对票
1赞
Thomas
5/28/2015
#3
SELECT
t1.ID
,t1.NAME
,t1.Grade
,t1.Marks
FROM t1
INNER JOIN (
SELECT Grade
,max(Marks) AS highest_marks
FROM t1
GROUP BY Grade
) AS TEMP ON t1.Marks = TEMP.highest_marks
AND t1.Grade = TEMP.Grade
评论
0赞
Sunil
9/1/2016
谢谢,这解决了我的问题
-1赞
Dhaval
5/28/2015
#4
这不是最好的方法,但你可以试试这个。!!
with cte as
(
select id,max(marks)as m from test group by id
)
select t.id,t.sub,t.grade,t.marks from test t
inner join cte c on c.id=t.id and t.marks=c.m
评论