У меня есть таблица с этими данными:
| name | type | score |
+------+------+-------+
| a | 1 | 15 |
+------+------+-------+
| b | 2 | 12 |
+------+------+-------+
| c | 1 | 17 |
+------+------+-------+
Теперь я должен создать запрос, чтобы получить количество каждого типа и имя студента, которые получают максимальный балл. Это мой запрос:
select name , count(*) as count ,score ,type
group by type
и результат:
| name | type | score | count |
+------+------+-------+--------+
| a | 1 | 15 | 2 |
+------+------+-------+--------+
| b | 2 | 12 | 1 |
+------+------+-------+--------+
но я ожидаю этого результата:
| name | type | score | count |
+------+------+-------+--------+
| c | 1 | 17 | 2 |
+------+------+-------+--------+
| b | 2 | 12 | 1 |
+------+------+-------+--------+
SELECT x.*
, y.total
FROM my_table x
JOIN
( SELECT type
, MAX(score) score
, COUNT(1) total
FROM my_table
GROUP
BY type
) y
ON y.type = x.type
AND y.score = x.score;
c 1 17
?