mysql sum 和 count_看完这个关键字的用法这么简单,感觉这几年的Mysql白学了……...

前言:

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

1725f0e86a2b60ac3d1bd511c82bc243.png

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

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


正文:

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

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

1.创建表:

表结构如图:

01134216e60bcd35f450e7da57afea03.png

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

2.编写SQL

2.1不进行rollup看下结果:

SELECT

channel_type,

COUNT(*)

FROM

yx_sms_message

GROUP BY

channel_type;

b0e860808ad6f8a88d7761097738b13d.png

2.2rollup看下结果:

SELECT

channel_type,

COUNT(*)

FROM

yx_sms_message

GROUP BY

channel_type WITH ROLLUP;

c661c2f69f6940d2659c2b7c143323a8.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;

e63d5201f28df3e3ce8430883a465c31.png

说明:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值