mysql一行多列求和_看完这个关键字的用法这么简单,感觉这几年的Mysql白学了……...

这篇博客介绍了在MySQL中如何使用ROLLUP关键字配合GROUP BY进行多列求和,避免了数据导出到Excel进行计算的步骤。通过示例创建表、编写SQL,展示了ROLLUP在分组求和运算中的应用,并解释了如何显示'合计'行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

用过excel的都知道,在表格里面对数据统计是很方便的,比如是对某一列求和,我们只需点击fx选择sum函数然后指定从哪一行/列到到一行/列即可。

72a936f36c07af9e33d78950172b6d84.png

但是在mysql里面在我们查出销售业绩后,领导突然想看下某一列的和?难道你就只能痴痴的复制到excel里面最求和运算吗?未免有点多此一举了吧?那你要这么整的话,估计领导会对你抛出不屑的眼神呵。

其实在mysql里面对这种聚合函数也是可以做到对列求和的。那就是今天要说的重点,关键字:ROLLUP


正文:

前面引用了那么多的废话,这里开始进入主题:

rollup通常是要和group by一起使用的。做分组后的列求和运算。接下来我们具体说个例子,作为演示。

1.创建表:

表结构如图:

c280c24545dac46f1575410583c8a449.png

图中标红的地方等下我们要根据这个字段进行分组求和统计。

2.编写SQL

2.1不进行rollup看下结果:

SELECT

channel_type,

COUNT(*)

FROM

yx_sms_message

GROUP BY

channel_type;

e1024f14aad19324cb579f190a65d3b6.png

2.2rollup看下结果:

SELECT

channel_type,

COUNT(*)

FROM

yx_sms_message

GROUP BY

channel_type WITH ROLLUP;

5b9a0563ead7de7c9b5d612da0c9c7ba.png

3.rollup后显示合计

细心地同学看到了,上面的虽然进行了求和,但是那一行却没有行头,

如何才能显示'合计'字眼呢,或许我们能够通过case when来实现。

SQL:

SELECT

CASE

WHEN channel_type = 'nusc' THEN

'用户中心_nusc'

WHEN channel_type = 'sms_app' THEN

'App_sms_app'

WHEN channel_type = 'sms_jichu' THEN

'基础平台sms_jichu'

WHEN channel_type = 'sms_wxxsxx_yxbd' THEN

'渠道sms_wxxsxx_yxcd'

WHEN channel_type = 'sms_wxxsxx_yxcd_q' THEN

'渠道sms_wxxsxx_yxcd_q'

ELSE

'合计'

END AS 业务类型,

SUM(sms_send_number) AS 合计条数,

COUNT(*) AS 合计记录数

FROM

yx_sms_message

WHERE

create_int_time >= 20190123

AND create_int_time <= 20190123

GROUP BY

channel_type WITH ROLLUP;

72f77a6e0a887cdc00fb30974840b6af.png

说明:

可能会有小伙伴有疑问,如果哪一个分组channel_type本身就是空,岂不是也显示合计了吗,如果有这情况的话,同学们可以再嵌套一层case when或则ifNull方法事先将null的替换成指定值,然后再在最外层进行case when... group by rollup即可。

注意这里的rollup,跟rollback没有一点关系,同学们不要望文生义,这个rollback是针对事务回滚用的,跟rollup是完全不同的两个关键字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值