0

我认为这可能真的很容易,但我没有在 SQL 中练习过,也不知道很多语法。

基本上我有一个不同的大表User Complaints(由 a 表示problem ID)并且Timestamps我想绘制图表。

个人陈述非常简单明了。例子:

SELECT DATE( datetimebegin ) AS Date, COUNT( * ) AS CntProb1
FROM `problems` 
WHERE problemID = "1"
GROUP BY Date, problemID;

SELECT DATE( datetimebegin ) AS Date, COUNT( * ) AS CntProb2
FROM `problems` 
WHERE problemID = "2"
GROUP BY Date, problemID;

每个表都给了我一个非常简单的输出:

Date, CntProb1
2013-03-11,4
2013-03-14,1
2013-03-17,7

Date, CntProb2
2013-03-12,2
2013-03-13,1
2013-03-14,3
2013-03-17,1

我需要这样组合的结果:

Date, CntProb1, CntProb2
2013-03-11,4,0
2013-03-12,0,2
2013-03-13,0,1
2013-03-14,1,3
2013-03-17,7,1

如果您知道正确的 SQL 语法,我想这真的很简单……某种加入?!

非常感谢任何帮助!

4

1 回答 1

2

您不需要 JOIN 来获得结果,您应该能够通过在聚合函数中使用 CASE 表达式来获得它:

SELECT 
    DATE(datetimebegin) AS Date, 
    sum(case when problemID = '1' then 1 else 0 end) AS CntProb1,
    sum(case when problemID = '2' then 1 else 0 end) AS CntProb2
FROM `problems` 
WHERE problemID in ('1', '2')
GROUP BY DATE(datetimebegin);

如果你想使用count()而不是sum()then 你会使用:

SELECT 
    DATE(datetimebegin) AS Date, 
    count(case when problemID = '1' then problemID end) AS CntProb1,
    count(case when problemID = '2' then problemID end) AS CntProb2
FROM `problems` 
WHERE problemID in ('1', '2')
GROUP BY DATE(datetimebegin);

请参阅带有两个查询的演示的 SQL Fiddle 。

于 2013-09-03T20:14:13.303 回答