【问题标题】:case when sums returning null values求和返回空值的情况
【发布时间】:2019-04-29 19:05:19
【问题描述】:

我编写了以下临时表来设置求和查询的情况。

Total_count_package_5_15 和 total_count_package_5_13 都返回空值。 (他们不应该)。数据已在前面的临时表中正确设置,并且我已确认数据按预期存在。

create temporary table screening_packages_count_2018 as

select screening_screen_date,
       count(case when screening_package = 1 then 1 end) as count_package_1,
       count(case when screening_package = 2 then 1 end) as count_package_2,
       count(case when screening_package = 3 then 1 end) as count_package_3,
       count(case when screening_package = 4 then 1 end) as count_package_4

from prod.leasing_fact

where date_part(year, screening_screen_date) = 2018

group by screening_screen_date

order by 1;


-- 5 AND 6 PACKAGE TOTALS BASED ON 2018 1-4 COUNTS

    select date_trunc('day', screening_screen_date)                                              as day,
           case
               when (sum(count_package_1) + sum(count_package_2) + sum(count_package_3) <= 75)
                   then (sum(count_package_1) + sum(count_package_2) + sum(count_package_3)) end as total_count_package_5_15,

           case
               when ((sum(count_package_1) + sum(count_package_2) + sum(count_package_3)) >= 76 and
                     (sum(count_package_1) + sum(count_package_2) + sum(count_package_3)) <= 150)
                   then (sum(count_package_1) + sum(count_package_2) + sum(count_package_3)) end as total_count_package_5_13,

           0                                                                                     as total_count_package_6

    from screening_packages_count_2018

    where count_package_4 = 0
    group by day

我认为在使用 sum 时我的 case 语句中有错误,但我不确定这里发生了什么。谢谢!

【问题讨论】:

  • 我会在每个COUNT() function 的第一个Select 中添加一个ELSE 0。如果有任何NULL 值,则不能SUM NULL 值。但我可能是错的。
  • 好的,补充说。我现在每行都得到0,而不是null。应该是数据。
  • 你能发布数据来支持你的结果吗?另外,Where count_package_4 = 0 与您的0 结果有什么关系吗?
  • 没关系。 :) 它是固定的。谢谢!
  • @aks85 。 . .如果问题不再有效,则将其删除。

标签: sql sum case amazon-redshift


【解决方案1】:

试试这个...在每个Count() function 的第一个Select 中添加一个ELSE 0。如果有任何 NULL 值,则不能使用 SUM NULL 值。

create temporary table screening_packages_count_2018 as

select screening_screen_date,
       count(case when screening_package = 1 then 1 ELSE 0 end) as count_package_1,
       count(case when screening_package = 2 then 1 ELSE 0 end) as count_package_2,
       count(case when screening_package = 3 then 1 ELSE 0 end) as count_package_3,
       count(case when screening_package = 4 then 1 ELSE 0 end) as count_package_4

from prod.leasing_fact

where date_part(year, screening_screen_date) = 2018

group by screening_screen_date

order by 1;


-- 5 AND 6 PACKAGE TOTALS BASED ON 2018 1-4 COUNTS

    select date_trunc('day', screening_screen_date)                                              as day,
           case
               when (sum(count_package_1) + sum(count_package_2) + sum(count_package_3) <= 75)
                   then (sum(count_package_1) + sum(count_package_2) + sum(count_package_3)) end as total_count_package_5_15,

           case
               when ((sum(count_package_1) + sum(count_package_2) + sum(count_package_3)) >= 76 and
                     (sum(count_package_1) + sum(count_package_2) + sum(count_package_3)) <= 150)
                   then (sum(count_package_1) + sum(count_package_2) + sum(count_package_3)) end as total_count_package_5_13,

           0                                                                                     as total_count_package_6

    from screening_packages_count_2018

    where count_package_4 = 0
    group by day

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-24
    • 2021-06-27
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多