2013-07-19 4 views
1

Я подсчитываю количество отдельных клиентов и группирую их по другому столбцу. Я хочу, чтобы результат возвращал нули, если в группе не найдены клиенты. Со следующим кодом я не получаю нулей в моих результатах. Кто-то может помочь?return zeros with group by and count in mysql

SELECT download_date,resolution,COUNT(DISTINCT customer_id) FROM test.sample 
GROUP BY download_date,resolution; 

Что это дает мне следующий:

---------------------------------------- 
| 2011-06-09| HD  | 1    | 
---------------------------------------- 
| 2011-06-09| SD  | 1    | 
---------------------------------------- 
| 2012-06-10| SD  | 1    | 
---------------------------------------- 

В то время как я ищу, чтобы получить следующее:

---------------------------------------- 
| 2011-06-09| HD  | 1    | 
---------------------------------------- 
| 2011-06-09| SD  | 1    | 
---------------------------------------- 
| 2012-06-10| HD  | 1    | 
---------------------------------------- 
| 2012-06-10| SD  | 0    | 
---------------------------------------- 

Вот структура таблицы:

CREATE TABLE test.sample (
`customer_id` VARCHAR(15) NULL DEFAULT NULL, 
`download_date` DATE NULL DEFAULT NULL, 
`resolution` VARCHAR(2) NULL DEFAULT NULL, 
`total_units` INT(11) NULL DEFAULT NULL); 

INSERT INTO test.sample(`customer_id`,`download_date`,`resolution`,`total_units`) 
VALUES('1','2012-06-10','HD',40),('1','2012-06-10','HD',20), 
('2','2011-06-09','SD',10),('2','2011-06-09','HD',20); 

ответ

1
select dr.download_date, r.resolution,COUNT(DISTINCT customer_id) 
from 
(select DISTINCT download_date from sample) dr 
cross join 
(select distinct resolution from sample) r 
left join sample s on s.download_date = dr.download_date 
and r.resolution = s.resolution 
group by dr.download_date, r.resolution; 

FIDDLE

+0

который работает. хороший! Благодарю. –

+0

Вы всегда приветствуете bro –