gpt4 book ai didi

MySQL GROUP BY 和 HAVING

转载 作者:IT老高 更新时间:2023-10-29 00:07:53 26 4
gpt4 key购买 nike

我正在根据 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 行。

最佳答案

为 JOIN 使用派生表/内联 View :

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

请注意,如果有多个相关的 y 记录,这将复制 x 记录。要删除重复项,请使用 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)

关于MySQL GROUP BY 和 HAVING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5112590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com