0

次のようなクエリがあります。

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

ここにテーブルスキーマ。

4

1 に答える 1

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

于 2012-11-26T15:39:45.000 に答える