在MySQL我们常常会用到count,max,min这些函数,但是在利用这些函数的时候你确定你写的sql一定精确吗?话不多说,我们来个需求。
假设现在有一张消费表如下:
现在我们须要取出每个用户购买最多的商品名。看似一个很大略的需求,基本上都能在脑海里想出来下面的SQL。

SELECT max(num),user_id,goods_name FROM tb_user_consume GROUP BY user_id LIMIT 10;
从语句上面看,彷佛没有什么问题都知足需求,我们实行下来验证下。返回的结果如下:
觉得有点不对劲,难道1号商品这么脱销吗?大家都是买1号商品,我们来看下原始数据。
我们很清楚的看出来了,1000001 购买的商品是2号商品居多,结合上面的查询结果来看,max(num)彷佛没有问题,那么出问题彷佛的是在goods_name的显示上。查下网上的教程查询的结果集都只会包含group的那一列,和max的结果值。那么我们还得自己来想办理办法,做一个子查询先按照user_id分组取出最大的num值,创建临时表和源表用user_id和num查询,于是就有了下面的SQL。
SELECT a.user_id,a.`goods_name`,a.num FROM tb_user_consume a JOIN (SELECT user_id , max(num) AS num FROM tb_user_consume where user_id < 1000010 GROUP BY user_id) b ON a.user_id = b.user_id AND a.num = b.num;
查询结果为
比拟数据创造查询结果准确无误。以是千万不能偷