0

SQL では、統計データを表示したいので、存在しない平日に 0 を表示して、すべての平日の合計を表示したいと思います。同じことが月、時間、年にも当てはまります....

問題は、不足している日数を取得するために結合するテーブルがないことです。
これを行うクリーンな方法はありますか?

ありがとうございました

編集: DB とデータは無関係ですが、私は Oracle DB と Mysql を使用しています。

SELECT SUM(SALES) FROM SALES_TABLE WHERE SALES_DATE BETWEEN DATE1 AND DATE2 GROUP BY WEEKDAY

これを変更して、たとえば日曜日に 0 を取得し、SATURDAY :4、MONDAY:4 を取得しないようにする方法

4

2 に答える 2

3

日の名前を含むテーブルを作成してから、そのテーブルで左結合を実行できます。

あなたが持っているテーブル構造を見るのは助けになるでしょう、しかし私がそれをするつもりなら、私は次のようなことをするでしょう:

create table stats (dayname varchar(3), "value" int);
create table daynames (dayname varchar(3));
insert into stats values ('Sun', 5), ('Mon', 4), ('Wed', 13), ('Sun', 3), ('Tue', 5), ('Sat', 5), ('Mon', 32);
insert into daynames values ('Sun'),('Mon'),('Tue'),('Wed'),('Thu'),('Fri'),('Sat');

select daynames.dayname, sum("value") from daynames left outer join stats on stats.dayname=daynames.dayname group by daynames.dayname;

| dayname | sum |
|---------+-----|
| Fri     |     |
| Mon     | 36  |
| Sat     | 5   |
| Sun     | 8   |
| Thu     |     |
| Tue     | 5   |
| Wed     | 13  |

データに表されていない日付の合計にはnullがありますが、データベースサーバーによっては、それらをゼロに変換できます。

于 2012-04-13T07:15:43.777 に答える