Показывать даже нулевые значения в запросе кейса - PullRequest
0 голосов
/ 13 января 2020

Как бы я показал четные нулевые значения в этом запросе:

select 
case floor(reading_winddirection / 45)
    when 0 then 'N'
    when 1 then 'NE'
    when 2 then 'E'
    when 3 then 'SE'
    when 4 then 'S'
    when 5 then 'SW'
    when 6 then 'W'
    when 7 then 'NW'
end windgroup,
count(*) cnt,
round(100 * count(*) / sum(count(*)) over()) percentage 
from simulation_readings  
group by windgroup

Теперь запрос возвращает ie:

 N  66  66
 E  2   2
SE  1   1
SW  1   1

Но я sh, чтобы вернуть все случаи, даже если у них нет значений и установите их в 0

1 Ответ

2 голосов
/ 13 января 2020

Я думаю, что вы хотите left join с фиксированным списком, если значения

select 
    d.windgroup,
    count(s.reading_winddirection) cnt,
    coalesce(round(
        100 * count(s.reading_winddirection) 
        / nullif(sum(count(s.reading_winddirection)) over(), 0)
    ), 0) percentage 
from (
    select 0 n, 'N' windgroup
    union all select 1, 'NE'
    union all select 2, 'E'
    union all select 3, 'SE' 
    union all select 4, 'S'
    union all select 5, 'SW'
    union all select 6, 'W'
    union all select 7, 'NW'
) d
left join simulation_readings s 
    on  floor(s.reading_winddirection / 45) = d.n
group by d.windgroup

В MySQL <8.0, это будет выглядеть так: </p>

select 
    d.windgroup,
    coalesce(c.cnt, 0) cnt,
    coalesce(round(100 * c.cnt, 0 / nullif(t.total, 0)), 0) percentage 
from (
    select 0 n, 'N' windgroup
    union all select 1, 'NE'
    union all select 2, 'E'
    union all select 3, 'SE' 
    union all select 4, 'S'
    union all select 5, 'SW'
    union all select 6, 'W'
    union all select 7, 'NW'
) d
cross join (select count(*) total from simulation_readings) t
left join ( 
    select floor(reading_winddirection / 45) n, count(*) cnt
    from simulation_readings  
    group by n
) c on c.n = d.n
group by d.windgroup
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...