案例在 SQL 数据块中生成空值

case is generating nulls in SQL databricks

我在数据块中有一个非常简单的 table 和 key/value 对。我只想从长到宽移动几列而不使用 PIVOT。 但无论我怎么做,我总是以 Nulls 结尾。 (我一直在其他一些数据库中检查这个 SQL 与 mysql 完全相同,一切都按预期工作)

   CREATE TEMP VIEW channels(id, key, value) AS
       VALUES (1,'channel', 10),
              (1,'version',  20),
              (2,'channel',  30),
              (2,'version',  40),
              (3,'channel', 50),
              (3,'version', 60),
              (4,'channel',  70),
              (4,'version',  80),
              (5,'channel', 95),
              (5,'version',  105);
           
          
select max(id) as id,
case when max(key) = "channel" then max(value)  end as channel
from channels
group by id;
          
id  channel
1   NULL    
2   NULL    
3   NULL    
4   NULL    
5   NULL    

预计

id  channel
1   10
2   30
3   50
4   70
5   95

case 表达式 放在 MAX():

select id,
       max(case when key = "channel" then value end) as channel
from channels
group by id;

使用条件聚合FILTER clause:

select id, MAX(value) FILTER (WHERE key = 'channel') AS channel
from channels
group by id;

db<>fiddle demo

我也同意@Lukasz 的回答。

%sql
select id, MAX(value) FILTER (WHERE key = 'channel') AS channel
from channels
group by id;