2

mysqlのタイプc_dateとして列を持つテーブルがあり、毎日の売上、各月の合計売上、および売上がなかった日、月、年を含む年間の合計売上を出力したいと考えています。datetimetotalint

現在、毎日の販売のために、以下のクエリを実行しています:

mysql> select date(c_date) as date, sum(total) as total_sale from sale group by date;
+------------+------------+
| date       | total_sale |
+------------+------------+
| 2013-10-3  |        798 |
| 2013-10-6  |        114 |
+------------+------------+

しかし、私はこのようなものが欲しい:

mysql> select date(c_date) as date, sum(total) as total_sale from sale group by date;
+------------+------------+
| date       | total_sale |
+------------+------------+
| 2013-10-1  |          0 |
| 2013-10-2  |          0 |
| 2013-10-3  |        798 |
| 2013-10-4  |          0 |
| 2013-10-5  |          0 |
| 2013-10-6  |        114 |
+------------+------------+

毎月の場合、私はこれを取得しています:

mysql> select c_date, month(c_date) as month, year(c_date) as year, sum(total) as total from sale group by c_date order by c_date;
+---------------------+-------+------+-------+
| c_date              | month | year | total |
+---------------------+-------+------+-------+
| 2013-10-3 02:40:06  |    10 | 2013 |   228 |
| 2013-10-3 02:41:58  |    10 | 2013 |   114 |
| 2013-10-3 02:44:36  |    10 | 2013 |   114 |
| 2013-10-3 02:46:40  |    10 | 2013 |   114 |
| 2013-10-3 02:49:15  |    10 | 2013 |   114 |
| 2013-10-3 02:53:36  |    10 | 2013 |   114 |
| 2013-10-6 07:43:27  |    10 | 2013 |   114 |
+---------------------+-------+------+-------+

しかし、私はこのようなものが欲しい:

mysql> select c_date, month(c_date) as month, year(c_date) as year, sum(total) as total from sale group by c_date order by c_date;
+---------------------+-------+------+-------+
| c_date              | month | year | total |
+---------------------+-------+------+-------+
| 2013-1-3 02:40:06   |     1 | 2013 |     0 |
| 2013-2-3 02:41:58   |     2 | 2013 |     0 |
| 2013-3-3 02:44:36   |     3 | 2013 |     0 |
| 2013-4-3 02:46:40   |     4 | 2013 |     0 |
| 2013-5-3 02:49:15   |     5 | 2013 |     0 |
| 2013-6-3 02:53:36   |     6 | 2013 |     0 |
| 2013-7-6 07:43:27   |     7 | 2013 |     0 |
| 2013-8-3 02:44:36   |     8 | 2013 |     0 |
| 2013-9-3 02:46:40   |     9 | 2013 |     0 |
| 2013-10-3 02:49:15  |    10 | 2013 |   912 |
| 2013-11-3 02:53:36  |    11 | 2013 |     0 |
| 2013-12-6 07:43:27  |    12 | 2013 |     0 |
+---------------------+-------+------+-------+

これは MysqL で可能ですか?

4

2 に答える 2

1

カレンダー テーブルとの外部結合が必要なようです。

次のように入力されたカレンダー テーブルを想像してください。

カレンダー

Year Month   Day
2013 201310  2013-10-1    
2013 201310  2013-10-2
...

次に、次のようなクエリを書くことができます

         select date(c_day) as date, 
                sum(total) as total_sale 
           from calendar c 
left outer join sale s 
             on c.day = s.c_date
          where c.month = 201310
       group by c_day
         having c_day <= max(s.c_date); -- this is to avoid to show all 
                                        -- days for October
于 2013-10-21T12:39:24.207 に答える