首页 > 解决方案 > 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/8

标签: mysql

解决方案


试试下面: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

推荐阅读