多系列(列)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.
我有几年的数据在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.