Если ваша база данных поддерживает оконные функции, вы можете сделать:
SELECT x, max_y
FROM (
SELECT x, MAX(y) max_y, RANK() OVER(ORDER BY MAX(y) DESC) rn
FROM table_name
GROUP BY x
) t
WHERE rn = 1
В некоторых базах данных есть более подходящие решения. SQL Сервер имеет TOP (1) WITH TIES
, поэтому вы можете сделать:
SELECT TOP (1) WITH TIES x, MAX(y) max_y
FROM table_name
GROUP BY x
ORDER BY max_y DESC
Или для баз данных, которые поддерживают стандартное условие ограничения строк, например Oracle:
SELECT x, MAX(y) max_y
FROM table_name
GROUP BY x
ORDER BY max_y DESC
FETCH FIRST 1 ROW WITH TIES