场景:
给予一张商品售卖表,表中数据为商品的售卖记录,假设表中数据是定时脚本插入的,每个时间段的商品售卖数量不同,根据此表找各个商品的最多售卖数量的数据。
1、数据表
CREATE TABLE `goods_sell` ( `id` int(11) NOT NULL AUTO_INCREMENT, `goods_id` int(10) unsigned NOT NULL DEFAULT '0', `sell_num` int(10) unsigned NOT NULL DEFAULT '0', `create_time` int(10) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
2、数据内容
mysql> select * from goods_sell; +----+----------+----------+-------------+ | id | goods_id | sell_num | create_time | +----+----------+----------+-------------+ | 1 | 1 | 5 | 1420520010 | | 2 | 2 | 10 | 1420520000 | | 3 | 1 | 10 | 1410520000 | | 4 | 1 | 5 | 1510520000 | | 5 | 2 | 6 | 1510521000 | | 6 | 3 | 15 | 1510621000 | +----+----------+----------+-------------+ 6 rows in set (0.00 sec)
剖析其要求,也就是说,要用1条sql
找出goods_id 为1 的id为4的数据
找出goods_id 为2 的id为2的数据
找出goods_id 为3 的id为6的数据
3、怎么做呢?
这时就可以用MySQL的分组聚合,GROUP_CONCAT和SUBSTRING_INDEX一起使用。
#查找各个商品售卖最多的一条记录,此时group_concat()中一定要order by排序。要不然截取第一个数据就不对了。
select id,goods_id, SUBSTRING_INDEX(GROUP_CONCAT(sell_num order by sell_num desc),',',1) sell_num_max, create_time from goods_sell group by goods_id order by create_time DESC; +----+----------+--------------+-------------+ | id | goods_id | sell_num_max | create_time | +----+----------+--------------+-------------+ | 6 | 3 | 15 | 1510621000 | | 1 | 1 | 10 | 1420520010 | | 2 | 2 | 10 | 1420520000 | +----+----------+--------------+-------------+ 3 rows in set (0.00 sec)
不使用SUBSTRING_INDEX的话,查出来的数据是:
select id,goods_id, GROUP_CONCAT(sell_num order by sell_num desc) sell_num_list, create_time from good;
+----+----------+---------------+-------------+
| id | goods_id | sell_num_list | create_time |
+----+----------+---------------+-------------+
| 6 | 3 | 15 | 1510621000 |
| 1 | 1 | 10,5,5 | 1420520010 |
| 2 | 2 | 10,6 | 1420520000 |
+----+----------+---------------+-------------+
3 rows in set (0.00 sec)
所以用SUBSTRING_INDEX截取最前面的一个数据。
文档参考:
https://www.cnblogs.com/zhwbqd/p/4205821.html
https://blog.csdn.net/m0_37797991/article/details/80511855
https://baijiahao.baidu.com/s?id=1595349117525189591&wfr=spider&for=pc