MySQL分组聚合group_concat + substr_index
场景:
给予一张商品售卖表,表中数据为商品的售卖记录,假设表中数据是定时脚本插入的,每个时间段的商品售卖数量不同,根据此表找各个商品的最多售卖数量的数据。
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
MySQL分组聚合group_concat + substr_index的更多相关文章
- Mysql 分组聚合实现 over partition by 功能
mysql中没有类似oracle和postgreSQL的 OVER(PARTITION BY)功能. 那么如何在MYSQL中搞定分组聚合的查询呢 先说结论: 利用 group_concat + sub ...
- mysql分组合并GROUP_CONCAT
SELECT pid, GROUP_CONCAT(field ORDER BY coder desc) 'msg'from product_field GROUP BY pid 分 ...
- MySQL最常用分组聚合函数
一.聚合函数(aggregation function)---也就是组函数 在一个行的集合(一组行)上进行操作,对每个组给一个结果. 常用的组函数: AVG([distinct] expr) 求平均值 ...
- mysql 分组和聚合函数
mysql 分组和聚合函数 Mysql 聚集函数有5个: 1.COUNT() 记录个数(count(1),count(*)统计表中行数,count(列名)统计列中非null数) 2.MAX() 最大值 ...
- mysql数据库优化课程---10、mysql数据库分组聚合
mysql数据库优化课程---10.mysql数据库分组聚合 一.总结 一句话总结:select concat(class,' 班') 班级,concat(count(*),' 人') 人数 from ...
- 浅析MySQL使用 GROUP BY 分组聚合与细分聚合
原创文章,转载请注明出处:http://www.cnblogs.com/weix-l/p/7521278.html: 若有错误,请评论指出,谢谢! 1. 聚合函数(Aggregate Function ...
- Oracle和MySQL分组查询GROUP BY
Oracle和MySQL分组查询GROUP BY 真题1.Oracle和MySQL中的分组(GROUP BY)有什么区别? 答案:Oracle对于GROUP BY是严格的,所有要SELECT出来的字段 ...
- MySQL之聚合数据(AVG,COUNT,MAX,MIN,SUM)
1.首先我们需要了解下什么是聚合函数 聚合函数aggregation function又称为组函数. 认情况下 聚合函数会对当前所在表当做一个组进行统计. 2.聚合函数的特点 1.每个组函数接收一个参 ...
- mysql concat和group_concat
mysql concat(str1,str2...)连接两个字符串,(数字也是可以的,会转成字符串) MySQL的concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL mys ...
随机推荐
- ElasticSearch 基础 1
ElasticSearch 基础=============================== 索引创建 ========================== 1. RESTFUL APIAPI 基本 ...
- Apache httpclient拦截器对请求进行签名
Apahce httpclient 提供HttpRequestInterceptor和HttpResponseInterceptor两种拦截器分别处理请求和响应数据,下面讲一下如何对http请求进行拦 ...
- Redis数据类型:Sorted Sets操作指令
Redis数据类型:Sorted Sets操作指令 Sorted Sets常用操作指令 Sorted Sets,本质是一个有序的Sets,其实在原来的Sets集合中对每一个元素新增了一个属性Score ...
- 关于toString()和valueOf()以及Object.prototype.toString.call()的结合理解
一.先说说String(): String()是全局函数,把对象的值转换为字符串. 语法:String(obj); 任何值(对象)都有String()方法,执行过程是这样的:首先,如果该对象上有toS ...
- HDU 1494 题解(DP)
题面: 跑跑卡丁车 Problem Description 跑跑卡丁车是时下一款流行的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣.这款游戏的特别之处是你可以通过漂移来获得一种 加速卡,用这种加 ...
- TP5.1+Vue前后端分离实践
配置: 主域名 www.demo.xyz 二级子域名 api.demo.xyz 列表项目其中api.demo.xyz加入了版本控制,使用的是URL路由传入方式 在route.php路由文件中配置,如下 ...
- 5105 pa1 MapReduce
Programming Assignment 1: A simple MapReduce-like compute framework Yuanli Wang wang8662 ...
- Windows下的vue-devtools工具的安装
详细教程在这个链接里: https://www.cnblogs.com/xqmyhome/p/10972772.html
- git常用相关操作
// 账号密码克隆远程项目 git clone http://账号:密码@项目地址 // 查看当前状态 git status // 查看修改内容 git diff // 添加并提交 git add . ...
- python 数据分析 Numpy(Numerical Python Basic)
a = np.random.random((2,4)) a Out[5]: array([[0.20974732, 0.73822026, 0.82760722, 0.050551 ], [0.773 ...