Здравствуйте!
В общем сегодня тут задавал вопрос, по группировке нескольких SELECT. Select с GROUP BY по дате из 3ех таблиц, если быть точным. В итоге получил ответ, но обнаружил странную работу.
К сути.
Если выполняю такой код:
SELECT `date`,
case when `user` = 'new_sites' then cnt else 0 end as new_sites,
case when `user` = 'new_users' then cnt else 0 end as new_users,
case when `user` = 'new_leads' then cnt else 0 end as new_leads
FROM (
SELECT `date`, COUNT(*) AS cnt, 'new_sites' as user FROM `l_sites` GROUP BY `date`
union all
SELECT `date`, COUNT(*) AS cnt, 'new_users' as user FROM `l_users` GROUP BY `date`
union all
SELECT `date`, COUNT(*) AS cnt, 'new_leads' as user FROM `l_leads` GROUP BY `date`
) as T
Результат выходит такой:
Даты повторяются, но в целом всё отлично. Осталось то дописать GROUP BY `date` в конце и с делом покончено - подумал я.
Пишу следующий код:
SELECT `date`,
case when `user` = 'new_sites' then cnt else 0 end as new_sites,
case when `user` = 'new_users' then cnt else 0 end as new_users,
case when `user` = 'new_leads' then cnt else 0 end as new_leads
FROM (
SELECT `date`, COUNT(*) AS cnt, 'new_sites' as user FROM `l_sites` GROUP BY `date`
union all
SELECT `date`, COUNT(*) AS cnt, 'new_users' as user FROM `l_users` GROUP BY `date`
union all
SELECT `date`, COUNT(*) AS cnt, 'new_leads' as user FROM `l_leads` GROUP BY `date`
) as T GROUP BY `date`
В итоге получаем:
Обратите внимание, в первом случае в крайнем правом столбце 3 единицы, в во втором случае с группировкой только две. GROUP BY съедает данные на 2016-08-24. Кстати с столбцом по центру аналогичная ситуация.
В чём проблема и как решить?