* Author:RDP
* My mail:abel1314520@gmail.com
* 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 是语法错误!