【问题标题】:Handling null values when case statement return null postgresql当 case 语句返回 null postgresql 时处理 null 值
【发布时间】:2017-12-21 10:11:54
【问题描述】:

我有一张名为 check_n 的表格,其中有城市和价值

我编写了一个查询,其中包含 CASE 语句。以下是我的查询

select city,
       CASE when (value/10)::integer = 2 
       then 2 END as a,
       CASE when (value/10)::integer = 5 
       then 5 END as b,
       CASE when (value/10)::integer = 3 
       then 3 END as c
from check_n;

在下图中附加输出

我想要输出如下:

city, a, b, c
glb, 2, 5, 3

感谢任何帮助。我正在使用 Postgresql 9.5

如果我有另一个表 chck_n ,如何使用该函数:

 city |  fact  | value 
------+--------+-------
glb  | male   | 22000
glb  | female | 23000
glb  | total  | 45000

我想使用这个查询:

SELECT city,
      CASE WHEN fact = 'male'
           THEN value
      END as males,
      CASE WHEN fact= 'female'
           THEN value
      END as females,
      CASE WHEN fact ='total'
           THEN value
      END as total
FROM chck_n;

【问题讨论】:

  • 您的预期输出没有意义。 value 怎么可能同时等于 2、5 和 3?请向我们展示示例数据以及您期望的输出。

标签: sql postgresql null case


【解决方案1】:

如果您希望每个城市有一个结果,您可以这样进行:

SELECT city,
       CASE WHEN 2 =ANY (array_agg((value/10)::integer))
            THEN 2
       END as a,
       CASE WHEN 5 =ANY (array_agg((value/10)::integer))
            THEN 5
       END as b,
       CASE WHEN 3 =ANY (array_agg((value/10)::integer))
            THEN 3
       END as c
FROM check_n
GROUP BY city;

 city | a | b | c 
------+---+---+---
 glb  | 2 | 5 | 3
(1 row)

【讨论】:

  • 嘿,如果我有另一个表 chck_n 怎么样:city |事实|值 ------+--------+-------- glb |男| 22000 磅 |女| 23000 磅 |总计| 45000 我想使用这个查询: SELECT city, CASE WHEN fact = 'male' THEN value END as males, CASE WHEN fact= 'female' THEN value END as females, CASE WHEN fact ='total' THEN value END as total FROM chck_n;
  • 如果是类似的问题,同样做。如果情况不同,请写一个新问题。
【解决方案2】:

我假设你的数据集:

with ds as (
select city,
       CASE when (value/10)::integer = 2 
       then 2 END as a,
       CASE when (value/10)::integer = 5 
       then 5 END as b,
       CASE when (value/10)::integer = 3 
       then 3 END as c
from check_n)
select distinct city, max(a)a, max(b) b, max(c) c
from ds
group by city

【讨论】:

    猜你喜欢
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多