当前位置:   article > 正文

关于Mysql中max()与group by联合使用时的取值问题_mysql max group by

mysql max group by

今天在微信群里看到一个码友问了一个关于group 和 max()一起使用的时,取出的数据并不是想要的数据。

于是自己建了个简单的表试了一下,还真是,话不多说,先上表(t_price)数据:

毕竟只是做测试用,这些数据足够了。

 

需求:取出按num分组,每组最大的一条数据;

 

1.先执行下面这个语句:

SELECT *,MAX(price) FROM t_price GROUP BY num

得到的是错误的数据:

可以看到最后一栏虽然得到的数据的确是每个num的所属组的最大值,但是对应的却不是正确的行数

查了下,做了下实验发现group by会先Max执行,所以得到的都是每个num对应的第一行数据,

那就会想到一个也经常用的order by 和group by 又是怎么样怎样的一个先后顺序?

如果Order by 先执行的话不是直接在后面直接加个order by就可以得到想要的结果了?

那么来试试:

运行:SELECT *,MAX(price) FROM t_price GROUP BY num ORDER BY price DESC

得到的是:

可以看到,结果是group by 先执行再执行order by ,所以也是没有办法得到想要的结果,

 

那想要的到想要的结果,写法:

<1>正确

SELECT * FROM t_price WHERE price in (select max(price) Max_price FROM t_price  GROUP BY num) GROUP BY num 
因为group by 不会位于where之前。(where先对表的数据进行筛选)

 

 

<2>要看mysql的版本

这个语句是我查资料的时候看到的,但是用在我的表里面就不适用,感觉奇怪

SELECT * FROM (SELECT * FROM t_price ORDER BY price DESC)t2 GROUP BY num

这个是我执行语句之后的结果,我机子上的Mysql是5.7版本的,用了一个mysql5.5的来实验,得到的是:

查了一下,mysql5.7之后对于这个顺序很像进行改变了,所以使用这个语句的时候要特别小心。

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/952726
推荐阅读
相关标签
  

闽ICP备14008679号