暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL分组语句

原创 只是甲 2020-06-01
933

备注:测试数据库版本为MySQL 8.0

这个blog我们来聊聊Mysql的分组语句

Table of Contents

测试数据:

CREATE TABLE testa (area VARCHAR(20), month VARCHAR(20), amount int); insert into testa values ('上海', '1月', 199); insert into testa values ('上海', '2月', 199); insert into testa values ('上海', '3月', 155); insert into testa values ('上海', '3月', 155); insert into testa values ('上海', '4月', 125); insert into testa values ('广州', '1月', 75); insert into testa values ('广州', '2月', 67); insert into testa values ('北京', '1月', 235); insert into testa values ('北京', '2月', 330); Commit;
复制

一.group by 语句

-- 按地区和月份进行汇总,求总的销售额 SELECT area, month, SUM(amount) FROM testa GROUP BY area, month ORDER BY area, month;
复制
mysql> SELECT area, month, SUM(amount) FROM testa -> GROUP BY area, month ORDER BY area, month; +--------+-------+-------------+ | area | month | SUM(amount) | +--------+-------+-------------+ | 上海 | 1月 | 199 | | 上海 | 2月 | 199 | | 上海 | 3月 | 310 | | 上海 | 4月 | 125 | | 北京 | 1月 | 235 | | 北京 | 2月 | 330 | | 广州 | 1月 | 75 | | 广州 | 2月 | 67 | +--------+-------+-------------+ 8 rows in set (0.01 sec)
复制

二.rollup语句

rollup(a)=(a) union all (_ALL)
–rollup(a,b)=(a,b) union all (a) union all (_ALL)
–rollup(a,b,c)=(a,b,c) union all (a,b) union all (a) union all (_ALL)

-- 求每个地区、每月汇总,以及每个地区的汇总,以及总的汇总 SELECT ifnull (area, '地区合计') area, ifnull(month, '月合计') month, SUM(amount) FROM testa GROUP BY area, month with rollup;
复制
mysql> SELECT ifnull (area, '地区合计') area, ifnull(month, '月合计') month, SUM(amount) -> FROM testa -> GROUP BY area, month with rollup; +--------------+-----------+-------------+ | area | month | SUM(amount) | +--------------+-----------+-------------+ | 上海 | 1月 | 199 | | 上海 | 2月 | 199 | | 上海 | 3月 | 310 | | 上海 | 4月 | 125 | | 上海 | 月合计 | 833 | | 北京 | 1月 | 235 | | 北京 | 2月 | 330 | | 北京 | 月合计 | 565 | | 广州 | 1月 | 75 | | 广州 | 2月 | 67 | | 广州 | 月合计 | 142 | | 地区合计 | 月合计 | 1540 | +--------------+-----------+-------------+ 12 rows in set, 2 warnings (0.01 sec)
复制

三.grouping语句

grouping(expr)
– 若是expr的汇总,则返回1,否则返回0

判断是否是area/month列的汇总 SELECT ifnull(area,'地区合计') area, ifnull(month,'月合计') month, SUM(amount) s_amount,grouping(month) grping1,grouping(area) grping2 FROM testa GROUP BY area, month with rollup;
复制
mysql> SELECT ifnull(area,'地区合计') area, ifnull(month,'月合计') month, SUM(amount) s_amount,grouping(month) grping1,grouping(ar -> FROM testa -> GROUP BY area, month with rollup; +--------------+-----------+----------+---------+---------+ | area | month | s_amount | grping1 | grping2 | +--------------+-----------+----------+---------+---------+ | 上海 | 1月 | 199 | 0 | 0 | | 上海 | 2月 | 199 | 0 | 0 | | 上海 | 3月 | 310 | 0 | 0 | | 上海 | 4月 | 125 | 0 | 0 | | 上海 | 月合计 | 833 | 1 | 0 | | 北京 | 1月 | 235 | 0 | 0 | | 北京 | 2月 | 330 | 0 | 0 | | 北京 | 月合计 | 565 | 1 | 0 | | 广州 | 1月 | 75 | 0 | 0 | | 广州 | 2月 | 67 | 0 | 0 | | 广州 | 月合计 | 142 | 1 | 0 | | 地区合计 | 月合计 | 1540 | 1 | 1 | +--------------+-----------+----------+---------+---------+ 12 rows in set, 2 warnings (0.00 sec)
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论

目录
  • 一.group by 语句
  • 二.rollup语句
  • 三.grouping语句