MySQL group by对单字分组序和多字段分组的方法讲解
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,我这里创建了一个 goods 表,先看下里面的数据:mysql> select * from goods;+----+------+------+------------+-------------+
千家信息网最后更新 2026年10月31日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安全错误
数据库的锁怎样保障安全
咖啡
互联网科技公司排名
科技赋能下的互联网金融
科技与互联网发展
礼当家互联网科技
卓越科技(互联网 )
亿策互联网科技
睿民互联网科技
广州紫鲸互联网科技
互联网公司会议桌创意科技软装饰
央行互联网金融科技公司
洛阳昕诺飞互联网科技有限公司
华夏恒生科技与互联网科技
互联网在线教育科技创业
晋城互联网科技
北京市互联网新科技
浙南科技城互联网大厦招聘
西安有哪些互联网高科技企业
福建互联网展示科技馆设计
互联网领先科技成果宣传视频
互联网 科技创业
互联网科技的英文
万达互联网科技
互联网科技产品
济南华为互联网科技产业总部基地
互联网科技实习生岗位职责
互联网还是高科技吗
洛阳昕诺飞互联网科技有限公司
西安左小互联网科技有限公司
互联网科技创新创业项目