MySQL group by对单字分组序和多字段分组的方法讲解
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,我这里创建了一个 goods 表,先看下里面的数据:mysql> select * from goods;+----+------+------+------------+-------------+
千家信息网最后更新 2025年11月07日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安全错误
数据库的锁怎样保障安全
电商数据库课设
网络安全之黑客
中国银上海行软件开发
自有服务器和托管服务器的区别
网络安全宣传周手抄报五年级
微交易是软件开发
数据库原理及应用习题6
中科可控服务器管理口地址
我的世界沉羊的服务器编号
张家界软件开发工程师
做软件开发什么笔记本合适
如何认识新兴互联网金融科技
工信部高级软件开发工程师
网络安全法的认识
怡品天成互联网科技有限公司
市北区游戏软件开发公司
龙华服务器机箱机柜
前海微智盛网络技术百度
小学网络安全公益宣传
服务器管理必备知识
高中水平网络技术测试题型
多线程更新数据库发生死锁
两个人同时链接一台服务器电脑吗
samba服务器 手机
去o数据库选项
上海正规软件开发服务费
网络安全红蓝对抗演习
库存管理数据库
长春市第二中专网络技术
永兴学计算机软件开发学费多少