我正在按列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
在20,000行数据上,运行时间为5毫秒。