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

时间:2016-08-07 15:34:44

标签: mysql graph group-by series

我在表格中有几年的数据(查询)。每个条目都有一个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)

我所看到的是所有行中每年的总数。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

使用条件聚合:

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',以便它可以利用索引。

答案 1 :(得分:1)

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

我会用这种方式编写查询:

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布尔表达式返回 true 的整数1。