在案例查询中显示偶数空值
Posted
技术标签:
【中文标题】在案例查询中显示偶数空值【英文标题】:Show even null values in case query 【发布时间】:2020-01-12 23:11:22 【问题描述】:我如何在这个查询中显示空值:
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
现在查询返回即:
N 66 66
E 2 2
SE 1 1
SW 1 1
但我希望它返回所有情况,即使它们没有值并将它们设置为 0
【问题讨论】:
【参考方案1】:我认为你想要一个带有固定列表的left join
if 值
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
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
【讨论】:
我收到一个错误:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 6 行的 '(), 0) ), 0) percent from (select 0 n, 'N' windgroup union ' 附近使用正确的语法 @stacks:这在this db fiddle 中运行良好。您使用的是哪个版本的 MySQL? 服务器版本:5.7.28-cll-lve - MySQL 社区服务器 - (GPL) @stacks:但是您开始问题的查询不在 MySQL 5.7 上运行(它仅在 MySQL 8.0 上运行)。无论如何,我用应该适用于您的版本的解决方案更新了我的答案。 是的,我想我在本地和远程服务器上尝试时复制了错误的查询。现在我得到:'group statement'中的未知列'windgroup'以上是关于在案例查询中显示偶数空值的主要内容,如果未能解决你的问题,请参考以下文章