MySQL group by对单字分组序和多字段分组的方法讲解
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,我这里创建了一个 goods 表,先看下里面的数据:mysql> select * from goods;+----+------+------+------------+-------------+
千家信息网最后更新 2025年01月20日MySQL group by对单字分组序和多字段分组的方法讲解
我这里创建了一个 goods 表,先看下里面的数据:
mysql> select * from goods;+----+------+------+------------+-------------+------------+| id | s_id | b_id | goods_name | goods_price | goods_desc |+----+------+------+------------+-------------+------------+| 1 | 1 | 5 | book | 22.35 | book || 2 | 2 | 5 | ball | 32.25 | ball || 3 | 3 | 5 | NULL | 3.23 | NULL || 4 | 3 | 5 | macbook | 3.23 | book || 5 | 3 | 5 | listbook | 2.30 | book || 6 | 1 | 1 | nicebook | 9999.00 | nicebook || 7 | 2 | 3 | googlebook | 25.30 | book |+----+------+------+------------+-------------+------------+
1、根据s_id分组
mysql> select *,group_concat(goods_name) goods_names,group_concat(goods_desc) goods_descs,group_concat(id) ids,group_concat(goods_price) goods_prices from goods group by s_id;+----+------+------+------------+-------------+------------+------------------+---------------+-------+----------------+| id | s_id | b_id | goods_name | goods_price | goods_desc | goods_names | goods_descs | ids | goods_prices |+----+------+------+------------+-------------+------------+------------------+---------------+-------+----------------+| 1 | 1 | 5 | book | 22.35 | book | book,nicebook | book,nicebook | 1,6 | 22.35,9999.00 || 2 | 2 | 5 | ball | 32.25 | ball | ball,googlebook | ball,book | 2,7 | 32.25,25.30 || 3 | 3 | 5 | NULL | 3.23 | NULL | macbook,listbook | book,book | 3,4,5 | 3.23,3.23,2.30 |+----+------+------+------------+-------------+------------+------------------+---------------+-------+----------------+
这里使用了 group_concat()
函数,主要目的是为了显示分组的详细信息
上面的根据单个字段分组很简单,把相同s_id
的记录都归组了
2、根据s_id,goods_desc字段分组
分析:这里查询分组时,会先根据s_id分组,然后对每个组里面的数据再根据goods_desc进行分组
mysql> select *,group_concat(goods_name) goods_names,group_concat(goods_desc) goods_descs,group_concat(id) ids,group_concat(goods_price) goods_prices from goods group by s_id,goods_desc;+----+------+------+------------+-------------+------------+------------------+-------------+------+--------------+| id | s_id | b_id | goods_name | goods_price | goods_desc | goods_names | goods_descs | ids | goods_prices |+----+------+------+------------+-------------+------------+------------------+-------------+------+--------------+| 1 | 1 | 5 | book | 22.35 | book | book | book | 1 | 22.35 || 6 | 1 | 1 | nicebook | 9999.00 | nicebook | nicebook | nicebook | 6 | 9999.00 || 2 | 2 | 5 | ball | 32.25 | ball | ball | ball | 2 | 32.25 || 7 | 2 | 3 | googlebook | 25.30 | book | googlebook | book | 7 | 25.30 || 3 | 3 | 5 | NULL | 3.23 | NULL | NULL | NULL | 3 | 3.23 || 4 | 3 | 5 | macbook | 3.23 | book | macbook,listbook | book,book | 4,5 | 3.23,2.30 |+----+------+------+------------+-------------+------------+------------------+-------------+------+--------------+
这里的goods_descs 和 上面的一比较就明白了
接下来还可以再根据 goods_price 分组
mysql> select *,group_concat(goods_name) goods_names,group_concat(goods_desc) goods_descs,group_concat(id) ids,group_concat(goods_price) goods_prices from goods group by s_id,goods_desc,goods_price;+----+------+------+------------+-------------+------------+-------------+-------------+------+--------------+| id | s_id | b_id | goods_name | goods_price | goods_desc | goods_names | goods_descs | ids | goods_prices |+----+------+------+------------+-------------+------------+-------------+-------------+------+--------------+| 1 | 1 | 5 | book | 22.35 | book | book | book | 1 | 22.35 || 6 | 1 | 1 | nicebook | 9999.00 | nicebook | nicebook | nicebook | 6 | 9999.00 || 2 | 2 | 5 | ball | 32.25 | ball | ball | ball | 2 | 32.25 || 7 | 2 | 3 | googlebook | 25.30 | book | googlebook | book | 7 | 25.30 || 3 | 3 | 5 | NULL | 3.23 | NULL | NULL | NULL | 3 | 3.23 || 5 | 3 | 5 | listbook | 2.30 | book | listbook | book | 5 | 2.30 || 4 | 3 | 5 | macbook | 3.23 | book | macbook | book | 4 | 3.23 |+----+------+------+------------+-------------+------------+-------------+-------------+------+--------------+
这里主要是进行多个字段分组的时候,只需掌握分组顺序后面的字段是根据前面字段分组后的内容再进行的分组即可。
在平时的开发任务中我们经常会用到MYSQL的GROUP BY分组, 用来获取数据表中以分组字段为依据的统计数据。比如有一个学生选课表,表结构如下:
Table: Subject_Selection
Subject Semester Attendee---------------------------------ITB001 1 JohnITB001 1 BobITB001 1 MickeyITB001 2 JennyITB001 2 JamesMKB114 1 JohnMKB114 1 Erica
我们想统计每门课程有多少个学生报名,应用如下SQL:
SELECT Subject, Count(*)FROM Subject_SelectionGROUP BY Subject
得到如下结果:
Subject Count
------------------------------
ITB001 5
MKB114 2
因为表里记录了有5个学生选择ITB001,2个学生选择了MKB114。
产生这个结果的原因是:
GROUP BY X意思是将所有具有相同X字段值的记录放到一个分组里。
那么GROUP BY X, Y呢?
GROUP BY X, Y意思是将所有具有相同X字段值和Y字段值的记录放到一个分组里。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接
分组
字段
内容
学生
数据
相同
意思
结果
面的
学习
统计
选择
接下来
价值
任务
信息
函数
单个
原因
只需
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全攻击溯源
ipad3 连接服务器失败
龙井市供暖自动化控制软件开发
软件开发厂商电话多少
造价工程师转软件开发的多吗
计算机网络技术专业选择的理由
软件开发时期阶段
软件开发工程师简介
为什么ftp不能登录服务器
巢湖企业网络技术开发费用
无锡党委党组网络安全责任
卡溜软件开发
手游沙漠服务器
网络安全最基本的就业方向
php设置数据库编码
金山区销售软件开发应用范围
俄罗斯网络安全框架
hive数据库操作
网络安全保护私人隐私
南京网络安全与信息化办公室
签订软件开发合同注意什么
服务器行业采购管理分析
对日软件开发要会java吗
单位网络安全事件处置流程
浪潮服务器后台数据修改
菏泽电脑数据库修复
新招网络安全师
黄石软件开发哪里有
网络安全工程师中级工资待遇
男生学电脑学软件开发