1

У меня есть таблица, скажем, с идентификатором и счетом. Я хотел бы иметь для каждого ID максимальный балл. Но может случиться так, что у меня одинаковая оценка для одного ID, и в этом случае я хочу иметь оба значения. Так скажем, у меня есть таблицавыберите максимальное значение для каждого ID (включая возможность множественных максимальных значений для одного ID!)

ID score 
1  10 
1  10 
2  8 
2  6 

Я хотел бы иметь в результате

ID score 
1  10 
1  10 
2  8 

Было бы сочетание

SELECT ID, max(score) FROM tbl GROUP BY ID, score ORDER BY ID 

и

select * from tbl where score = (select max (score) from tbl) 

Я пробовал

select * from tbl where score = (select max (score) from tbl GROUP BY ID) 

Но, конечно, это говорит о том, что у меня есть несколько строк в подзапросе. И я хочу, чтобы эти несколько строк, которые я не хочу, чтобы ограничить его 1.

Я пытался

SELECT * FROM tbl AS tbl1 
JOIN 
(select * from tbl where score = (select max (score) from tbl)) 
ON tbl1.ID=tbl.ID 

Но он говорит: «подзапрос в FROM должен иметь псевдоним» Я дал псевдонимы для всех подзапросов и I все еще есть эта ошибка.

+2

'выбрать * из ТПС t, где не существует (выберите * из tbl x, где x.id = t.id и x.score> t.score); 'voila! – joop

+0

Это прекрасно работает, спасибо вам большое! – userper

ответ

1

Один из способов будет использовать CTE:

WITH themaxes AS 
(SELECT id, max(score) AS maxscore FROM tbl GROUP BY ID) 
SELECT t.* FROM tbl t INNER JOIN themaxes m ON m.id = t.id AND m.maxscore = t.score; 

другой способ будет использовать window function (этот пример использует подзапрос с псевдонимом):

SELECT id,score FROM 
(SELECT rank() OVER (PARTITION BY id ORDER BY score DESC) AS therank, * FROM tbl) t 
WHERE therank = 1 
+0

Спасибо большое! Первое решение работает отлично, спасибо! Just to let you know, второе решение дает только максимальное значение для оценки (10), но не ID ассоциации 2. 8. – userper

+0

Действительно? Оба запроса возвращают идентичные результаты по моим тестовым данным! – mlinth

+0

@mlinth, который быстрее? –

 Смежные вопросы

  • Нет связанных вопросов^_^