2016-11-03 4 views
1

私はMySQLクエリに問題があります。平日までにMysqlグループを入力し、平日に記入しない

平日に記入する必要があります。たとえば、以下のSQLの例では日曜日(平日7)です。

SQL Fiddle

のMySQL 5.6スキーマのセットアップ

create table test (
`id` INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
`date` DATETIME 
); 

INSERT INTO test (`date`) VALUES 
('2016-05-16 00:00:00'), 
('2016-05-17 00:00:00'), 
('2016-05-18 00:00:00'), 
('2016-05-20 00:00:00'), 
('2016-05-21 00:00:00'), 
('2016-05-22 00:00:00'), 
('2016-05-16 00:00:00'), 
('2016-05-17 00:00:00'), 
('2016-05-18 00:00:00'), 
('2016-05-20 00:00:00'); 

クエリ1

SELECT WEEKDAY(date) AS weekday, 
    COUNT(id) AS posts 
FROM test 
GROUP BY WEEKDAY(date) 

Results

| weekday | posts | 
|---------|-------| 
|  0 |  2 | 
|  1 |  2 | 
|  2 |  2 | 
|  4 |  2 | 
|  5 |  1 | 
|  6 |  1 | 

私はこの行も返すと思います。

|  3 |  0 | 

私の完全なクエリは非常に複雑なので、私はあなたのための迅速な解決策を見つけることを望みます。

+0

あなたはその日のデータがありません。したがって、返すデータがないときに行を返さない。 –

+1

あなたは何かが欠落していると思う...あなたが '平日' ** 0 **を取得した場合、あなたは '平日 'を得ることができない** 7 * *(少なくともこの惑星ではない)。 – FDavidov

+1

私はあなたが '平日= 3投稿= 0'を期待していると思う。 –

答えて

4

通常のアプローチはleft joinです:

select wd.wd, count(t.id) 
from (select 1 as wd union all select 2 union all select 3 union all select 4 uion all 
     select 5 union all select 6 union all select 7 
    ) wd left join 
    test t 
    on wd.wd = weekday(t.date) 
group by wd.wd 
order by wd.wd; 
関連する問題