Группировка SQL с выводом значений из других столбцов, соответствующих MAX()
есть таблица
| person_id | fullname | test_id | date_test | score |
|---|---|---|---|---|
| 01 | Vasiliy | 123 | 21.02.2021 | 100 |
| 01 | Vasiliy | 123 | 13.01.2022 | 85 |
| 01 | Vasiliy | 123 | 30.05.2021 | 75 |
| 01 | Vasiliy | 123 | 23.03.2021 | NULL |
Мне надо сгруппировать GROUP BY по person_id при этом мне надо, чтобы группировалась информация по максимальному score. При этом в SELECT должны отображаться значения из столбцов fullname, test_id, date_test, соответствующие максимальному score. Т.е. в данном случае мне нужен вывод результата:
| person_id | fullname | test_id | date_test | score |
|---|---|---|---|---|
| 01 | Vasiliy | 123 | 21.02.2021 | 100 |
Подскажите, пожалуйста, как вывести значения, соответствующие максимальному score
Ответы (2 шт):
Автор решения: Konst
→ Ссылка
вариант без группировки (MS SQL):
declare @t table (person_id varchar(2), fullname varchar(50), test_id int, date_test datetime, score int);
insert into @t (person_id, fullname, test_id, date_test, score)
values
('01', 'Vasiliy', 123, '20210221', 100),
('01', 'Vasiliy', 123, '20220113',85),
('01', 'Vasiliy', 123, '20210530',75),
('01', 'Vasiliy', 123, '20210323',NULL),
('02', 'Ivan', 123, '20220323',10),
('02', 'Ivan', 123, '20220207',50);
WITH m as
(select person_id, fullname, test_id, date_test, score,
rn = ROW_NUMBER() over(partition by person_id order by score DESC)
from @t)
select person_id, fullname, test_id, date_test, score from m where rn = 1;
Автор решения: Vadim
→ Ссылка
SELECT * FROM table
WHERE Score = (SELECT MAX(Score) FROM table)
В подзапросе "SELECT MAX(Score) FROM table" мы выбираем максимальный Score, затем, в основном запросе, мы фильтруем с помощью WHERE те строки, в которых Score является максимальным для этой таблицы.