首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL GROUP BY and有

MySQL GROUP BY and有
EN

Stack Overflow用户
提问于 2011-02-25 09:23:54
回答 2查看 48.8K关注 0票数 16

我根据列X对结果进行分组,并希望返回组中列Y的值最高的行。

代码语言:javascript
运行
复制
SELECT * 
FROM   mytable 
GROUP  BY col1 
HAVING col2 >= (SELECT MAX(col2) 
                FROM   mytable AS mytable2 
                WHERE  mytable2.col1 = mytable.col1 GROUP BY mytable2.col1) 

我想优化上面的查询。无子查询的情况下可行吗?

我找到了解决方案,它比你想象的要简单:

代码语言:javascript
运行
复制
SELECT * FROM (SELECT * FROM mytable ORDER BY col2 DESC) temp GROUP BY col1

在20,000行上运行5毫秒。

EN

回答 2

Stack Overflow用户

发布于 2011-02-25 09:34:24

对联接使用派生表/内联视图:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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

以下代码未经测试,但不会返回重复项(假设有效):

代码语言:javascript
运行
复制
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)
票数 13
EN

Stack Overflow用户

发布于 2014-03-11 22:24:31

你的Col2从不是>然后是MAX( col2 ),所以我建议使用col2= MAX(col2)

下面是查询

代码语言:javascript
运行
复制
SELECT * FROM  mytable GROUP BY col1 HAVING  col2 = MAX(  col2 ) 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5112590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档