count(*)=0 не выводит строки с 0, не join запрос
В таблицу не попадают строки с quest_rk, у которых количество равно 0...
Запрос:
Select
quest_rk, count(*) as cnt
From
my_analytics.game
where (quest_rk = 31 or quest_rk = 7 or quest_rk = 9 or quest_rk = 19)
and (game_dttm > '2022-11-30 23:59:59.999' and game_dttm < '2023-01-01 00:00:00.000')
group by quest_rk
order by quest_rk
Подскажите, плиз, как быть...
Ответы (3 шт):
Не проверял:
Select
t2.quest_rk, count(t1.quest_rk) as cnt
From (
my_analytics.game
where (quest_rk = 31 or quest_rk = 7 or quest_rk = 9 or quest_rk = 19)
and (game_dttm > '2022-11-30 23:59:59.999' and game_dttm < '2023-01-01 00:00:00.000')
) t1 right join my_analytics.game t2 on t1.quest_rk=t2.quest_rk
group by t2.quest_rk
order by t2.quest_rk
Могу предложить вот такой вариант, если я правильно понял, что хочется получить:
select a.quest_rk, count(g.quest_rk) from
(
select 1 quest_rk from dual
union
select 2 from dual
union
select 3 from dual
union
select 4 from dual
union
select 6 from dual
) a
left join game g on a.quest_rk=g.quest_rk
group by a.quest_rk
Создаем выборку из нужных значений, далее при помощи left join цепляем нужную таблицу и считаем count(quest_rk) (не count(*) - т.к. со * считаются строки, а при указании столбца считаются значения, отличные от null)
Добиться результата удалось, создав отдельным запросом дополнительную таблицу из нужных мне quest_rk и объединив её с выборкой подходящих под критерии игр (game) через left join. Тогда в итоговой таблице проставляются нули, и все quest_rk из дополнительной таблицы есть.
Select
t1.quest_rk, count(t2.quest_rk) as cnt
From
(
select quest_rk
from my_analytics.quest
where quest_rk in (7,9,19,31)
) t1
left join my_analytics.game t2
on t1.quest_rk=t2.quest_rk
and (game_dttm > '2022-11-30 23:59:59.999'
and game_dttm < '2023-01-01 00:00:00.000')
and (game_flg = 1)
group by t1.quest_rk
order by t1.quest_rk