在案例查询中显示偶数空值

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'

以上是关于在案例查询中显示偶数空值的主要内容,如果未能解决你的问题,请参考以下文章

在此查询中,我需要添加啥使其永远不会显示空白或空值?

蜂巢显示空值

sql语句返回类型为hashmap的时候空值的字段会显示吗

怎么设置access查询中空值为0?

SQL 查询显示了良好的数据库值,但 LINQ to Entity 框架从无处获得空值

SQL问题求助,查询结果如何清除NULL的空值