2012-11-26 21 views
0

我有这样的查询:MySQL的左连接自或类似

SELECT SUM(spend.price) AS total, WEEKDAY(spend.date) AS weekday 
FROM spend 
WHERE spend.date BETWEEN '2012-11-01' AND '2012-11-07' 
GROUP BY WEEKDAY(spend.date) ; 

眼下查询给了我只有天中,用户有一定的款项。

total weekday 
60 2 
10 3 
3  5 
3  6 

但是反而我想每天给我0(零)没有付款。

total weekday 
0  1 
60 2 
10 3 
0  4 
3  5 
3  6 
0  7 

表格架构here

回答

1

原来这里是语法:

SELECT SUM(spend.price) AS total, day AS weekday 
FROM (SELECT price, WEEKDAY(date) as day FROM spend WHERE date BETWEEN '2012-11-01' AND '2012-11-07' 
UNION ALL 
SELECT 0,0 
UNION ALL 
SELECT 0,1 
UNION ALL 
SELECT 0,2 
UNION ALL 
SELECT 0,3 
UNION ALL 
SELECT 0,4 
UNION ALL 
SELECT 0,5 
UNION ALL 
SELECT 0,6 
) spend 
GROUP BY day ; 

这里是一个缩短:

CREATE TEMPORARY TABLE tmp (`price` int, `day` int); 
INSERT INTO tmp VALUES (0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6); 
SELECT SUM(spend.price) AS total, day AS weekday 
FROM (SELECT price, WEEKDAY(date) as day FROM spend WHERE date BETWEEN '2012-11-01' AND '2012-11-07' 
UNION ALL 
SELECT * FROM tmp 
) spend 
GROUP BY day ; 

这里是一个演示:从你的子查询http://sqlfiddle.com/#!2/8c323/3/0

+0

删除日期。否则,这会引发错误。 – Tom

+0

@Tom我没有在我的子查询中选择日期,但我必须用它来检查范围 –

+0

是的,现在看起来不错。 – Tom