mysql - MySQL:按查询统计分组中的总数
问题描述
我有一张这样的桌子:
---------------------------------- | 姓名 | 日期 | 活动 | ---------------------------------- | 约翰 | 七月 | 电子邮件 | | 卡尔 | 八月 | 电话 | | 约翰 | 七月 | 电话 | | 罗伯特 | 八月 | 电话 | | 卡尔 | 九月 | 电子邮件 | | 约翰 | 八月 | 电话 | | 卡尔 | 八月 | 电子邮件 | | 约翰 | 七月 | 电子邮件 | | 罗伯特 | 九月 | 电话 | | 卡尔 | 八月 | 电子邮件 | ----------------------------------
我计算了按日期和活动分组的数据,但我想要一个额外的列来为我提供具有该活动的总行数
我使用的查询:
选择活动、名称、 SUM(IF(date = 'July',1,0)) AS 七月, SUM(IF(date = 'August',1,0)) AS 八月, SUM(IF(date = 'September',1,0)) AS 9 月 从表 按名称、活动分组
但我想修改它以获得以下输出:
-------------------------------------------------- -------------------------------------- | 活动 | 姓名 | 七月 | 八月 | 九月 | 七月总和 | 八月总和 | 九月总和 | -------------------------------------------------- -------------------------------------- 电子邮件约翰 2 0 0 2 2 1 电话约翰 1 1 0 1 3 1 …… ……
我想要按月份区分电话或电子邮件的所有值的总和的列
解决方案
试试下面:http ://sqlfiddle.com/#!9/8b797a/24 :
select a.campaign,a.name,July, August,September,Julysum,Augustsum,Septembersum from
(SELECT campaign,name,
SUM(IF(date = 'July',1,0)) AS July,
SUM(IF(date = 'August',1,0)) AS August,
SUM(IF(date = 'September',1,0)) AS September
FROM `table`
GROUP BY campaign,name)a
left join
(select campaign,
SUM(IF(date = 'July',1,0)) AS Julysum,
SUM(IF(date = 'August',1,0)) AS Augustsum,
SUM(IF(date = 'September',1,0)) AS Septembersum
FROM `table`
GROUP BY campaign)b on a.campaign=b.campaign
where name='John'
输出:
campaign name July August September campaign Julysum Augustsum Septembersum
Email John 2 0 0 Email 2 2 1
Phone John 1 1 0 Phone 1 3 1
推荐阅读
- angular - angular.io 上的 HTTrack
- java - 如何使用泛型参数
- java - Spring/JPA 应用程序搜索不存在的数据库表
- python - pandas dataframe - 返回 iloc 中的值,如果不存在则返回零
- excel - VBA 下标超出范围,名称解析问题?
- spring-boot - Spring OAuth2服务器:WebSecurityConfigurerAdapter如何允许登录页面以外的另一个请求
- javascript - 目前是否有将两个或多个字符串文字类型连接到 TypeScript 中的单个字符串文字类型?
- xcode - 如何修复架构 x86_64 错误的未定义符号
- ios - 更改从代码初始化的视图控制器时如何修复消失的标签栏控制器
- python - 如何找到多个文本文件中数字的平均值?