Я группирую свои результаты на основе столбца X, и я хочу вернуть строки, которые имеют наибольшее значение столбца Y в группе .
SELECT *
FROM mytable
GROUP BY col1
HAVING col2 >= (SELECT MAX(col2)
FROM mytable AS mytable2
WHERE mytable2.col1 = mytable.col1 GROUP BY mytable2.col1)
Я хочу оптимизировать приведенный выше запрос. Можно ли это сделать без подзапросов?
Я нашел решение, и оно проще, чем вы думаете:
SELECT * FROM (SELECT * FROM mytable ORDER BY col2 DESC) temp GROUP BY col1
Выполняется за 5 миллисекунд на 20 000 строк.