所以我打算在MySQL中查询几个图表的数据, 图表的数据来自同一个表,但适用于多个时间范围。所以分组依据不起作用。
我想要的日期格式
Total Oranges Mangoes Bananas Tomatoes
----------------------------------------------
19 5 6 7 1
24 3 7 2 12
14 3 4 5 2
20 5 7 6 2
现在,我可以使用以下任一方法获取初始行
SELECT
sum(CASE WHEN Some_Criteria and (created between '2016-03-28' AND '2016-03-29')) THEN 1 ELSE 0 END ) Total ,
sum(CASE WHEN Some_Other_Criteria and (created between '2016-03-28' AND '2016-03-29')) THEN 1 ELSE 0 END ) Oranges
...
from SomeTable.Table1
left join OtherTable ON SomeId = OtherId
或通过
SELECT
(SELECT count(distinct Field) FROM from SomeTable.Table1 left join OtherTable ON SomeId = OtherId WHERE SomeCriteria and (DateRange)) AS Total
(SELECT count(distinct Field) FROM from SomeTable.Table1 left join OtherTable ON SomeId = OtherId WHERE SomeCriteria and (DateRange)) AS Oranges
...
将其放在同一行中很容易,因为我只需使用上述方法,但是如果我希望数据位于多行中但基于不同的日期范围怎么办?
最佳答案
您将需要结果集中的这些日期范围(子查询、临时表或某种永久表)。完成后,您可以将第一个查询与 JOIN
一起使用到您的范围表,然后在这些范围上使用 GROUP BY
。
例如:
SELECT
DR.start_date,
DR.end_date,
SUM(CASE WHEN Some_Criteria AND (created BETWEEN DR.start_date AND DR.end_date)) THEN 1 ELSE 0 END ) Total,
SUM(CASE WHEN Some_Other_Criteria AND (created BETWEEN DR.start_date AND DR.end_date)) THEN 1 ELSE 0 END ) Oranges,
...
FROM
Date_Ranges DR
INNER JOIN SomeTable.Table1 T1 ON
T1.created >= DR.start_date AND
T1.created < DR.end_date
LEFT OUTER JOIN OtherTable OT ON OT.SomeId = T1.OtherId
GROUP BY
DR.start_date,
DR.end_date
关于mysql - 通过计数语句的多行和多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36262521/