设为首页 收藏本站
查看: 785|回复: 0

[经验分享] MySQL group by 单字分组序和多字段分组

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-3-18 08:23:49 | 显示全部楼层 |阅读模式
我这里创建了一个 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         |
+----+------+------+------------+-------------+------------+-------------+-------------+------+--------------+



总结:这里主要是进行多个字段分组的时候,只需掌握分组顺序后面的字段是根据前面字段分组后的内容再进行的分组即可。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-47839-1-1.html 上篇帖子: vCenter Server 6.0安装(windows版本) 下篇帖子: Mysql 存储引擎中InnoDB与Myisam的主要区别
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表