2017-02-11 4 views
0

にグループごとの最大値を見つける:(学生と呼ばれる)を以下の表からPostgreSQLの

name course mark  
A  a   100 
A  c   78 
A  d   83 
B  a   79 
B  b   91 
C  c   78 
C  d   65 
D  a   75 

私は、最高のマークが、この場合にはコースの「a'.Soた名前を検索しようとしていますAとDは答えにする必要がありますが、私のクエリは、すべての学生の最大のマークを報告しているようだ:

私は間違っているつもりです
SELECT name 
FROM Student 
WHERE mark >= all 
    (SELECT mark FROM Student WHERE course='a'); 

+1

あなたの質問を編集して、結果を表示します。 –

答えて

1

あなたはとても近いです!物事を動かすだけで、あなたは元気です。複雑なものは一切必要ありません。

SELECT name 
FROM Student s 
WHERE course = 'a' AND mark >= all 
    (SELECT mark FROM Student WHERE name = s.name); 
0

これはrow_number()のための仕事のように思える:

select s.* 
from (select s.*, 
      row_number() over by (partition by name order by mark desc) as seqnum 
     from student s 
    ) s 
where seqnum = 1; 
関連する問題