多系列(列)MySQL 查询无法正确汇总

Multi-Series (Column) MySQL Query Won't Summarize Properly

我有几年的数据在table(查询)中。每个条目都有一个 contact_time 字段,这是他们的电子邮件联系人的时间戳。我正在尝试构建每月或每周的摘要数据以绘制多系列图。为此,我需要在第一列中查看月份或周数,在第二列中查看 2014 年的相应数据,在第三列中查看 2015 年的相应数据,依此类推。

SELECT MONTH(inquiries.contact_time) AS "Date",
(SELECT
    COUNT(inquiries.id) AS "Inquiries"
    FROM inquiries
    WHERE YEAR(inquiries.contact_time) = "2014"
) AS "2014",
(SELECT COUNT(inquiries.id) AS "Inquiries"
    FROM inquiries
    WHERE YEAR(inquiries.contact_time) = "2015"
) AS "2015"
FROM inquiries
GROUP BY MONTH(inquiries.contact_time)

我所看到的只是所有行中每年的总计数。感谢任何帮助。

使用条件聚合:

SELECT MONTH(i.contact_time),
       SUM(YEAR(i.contact_time) = 2014) as cnt_2014,
       SUM(YEAR(i.contact_time) = 2015) as cnt_2015
FROM inquiries i
WHERE YEAR(i.contact_time) >= 2014
GROUP BY MONTH(i.contact_time);

如果你在contact_time上有索引,那么使用条件where i.contact_time >= '2014-01-01',这样就可以利用索引。

您看到的是当年的总计数,因为您的子查询与外部查询分组的月份无关。

我会这样写查询:

SELECT MONTH(contact_time) AS `Date`,
  SUM(YEAR(contact_time)=2014) AS `2014`,
  SUM(YEAR(contact_time)=2015) AS `2015`
FROM inquiries
GROUP BY MONTH(contact_time)

解释:一组特定行的 COUNT() 与那些行的 1 的 SUM() 相同。 MySQL 布尔表达式 return 整数 1 为 true.