mysql中group by的排序问题_【Mysql】group by中的排序问题

/**  * Author:RDP  * My mail:[email protected]  * My blog:  http://blog.teamhaka.com

*/

比如有这样的一个表结构:

id  v1

10  1

11  1

20  1

8    1

7    1

当你使用

SELECT COUNT(*),id FROM tbl GROUP BY v1

来进行搜索的时候,得到的结果只有一行。其id的值是10。

这里id的值之所以是10,和你SQL语句中的是否含有ASC、DESC无任何关系。只是因为在表的存储中,id为10的行排在了v1为1这个group中的最前面。

如果你希望上例的select结果集中的id是20的话,你也千万别指望用类似SELECT * FROM tbl GROUP BY  v1 ORDER BY id DESC 来实现。因为group by 会比 order by 先执行。

归根结底,Mysql的group by 并没有排序功能!你没有办法在group by的各个group中进行针对某一列的排序。

但是解决方法是有的,提示就是最前面的红字:“只是因为在表的存储中,id为10的行排在了v1为1这个group中的最前面。”。

所以只要在group by前将顺序调整好,把你希望的数据排在最前面,那么group by时就能顺利取到这个数据。

故解决方法就是先进行你想要的排序,然后在此排序后的结果集的基础上,进行group by 操作。

就上例而言,若希望取到以v1列来分group,各group中id最大的值的话,SQL语句如下:

SELECT count(*) , id

FROM

( SELECT * FROM tbl ORDER BY id DESC ) temp

GROUP BY v1

注意:SELECT * FROM xxx GROUP BY  xxx DESC 是语法错误!

你可能感兴趣的:(mysql中group,by的排序问题)