如何选择不需要分组的列

时间:2016-04-20 04:49:06

标签: sql-server

我想选择与他们的兄弟/姐妹相比成绩最高的学生,但是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成绩最高

2 个答案:

答案 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