我想选择与他们的兄弟/姐妹相比成绩最高的学生,但是sql一直说我需要用他们的名字对它进行分组。
create table t (
id int,
fname varchar(30),
lname varchar(30),
grade int
);
insert into t VALUES
(3,'peter','yakobo',33),
(2,'ara','yakobo',21),
(1,'war','jones',45),
(0,'ororo','jones',46);
select fname,lname,MAX(grade)
from t
group by lname
例如:在yakobo家庭中,彼得的成绩最高,而在琼斯家族中,ororo成绩最高
答案 0 :(得分:0)
使用ROW_NUMBER
WITH Cte AS(
SELECT *,
rn = ROW_NUMBER() OVER(PARTITION BY lname ORDER BY grade DESC)
FROM t
)
SELECT
id, fname, grade
FROM Cte
WHERE rn = 1
正如ZLK所评论的那样:
如果有重复项,您可能希望使用
RANK()
,而不是ROW_NUMBER()
。
答案 1 :(得分:0)
试试这个,
SELECT *
FROM (
SELECT *
,ROW_NUMBER() OVER (
PARTITION BY lname ORDER BY grade DESC
) rn
FROM @t
) t4
WHERE rn = 1