我根据列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毫秒。
发布于 2011-02-25 09:34:24
对联接使用派生表/内联视图:
SELECT x.*
FROM mytable x
JOIN (SELECT t.col1,
MAX(t.col2) AS max_col2
FROM MYTABLE t
GROUP BY t.col1) y ON y.col1 = x.col1
AND y.max_col2 >= x.col2请注意,如果有多个相关的x记录,这将复制y记录。要删除重复项,请使用DISTINCT
SELECT DISTINCT x.*
FROM mytable x
JOIN (SELECT t.col1,
MAX(t.col2) AS max_col2
FROM MYTABLE t
GROUP BY t.col1) y ON y.col1 = x.col1
AND y.max_col2 >= x.col2以下代码未经测试,但不会返回重复项(假设有效):
SELECT x.*
FROM mytable x
WHERE EXISTS (SELECT NULL
FROM MYTABLE y
WHERE y.col1 = x.col1
GROUP BY y.col1
HAVING MAX(y.col2) >= x.col2)发布于 2014-03-11 22:24:31
你的Col2从不是>然后是MAX( col2 ),所以我建议使用col2= MAX(col2)
下面是查询
SELECT * FROM mytable GROUP BY col1 HAVING col2 = MAX( col2 ) https://stackoverflow.com/questions/5112590
复制相似问题