案例在 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;
我也同意@Lukasz 的回答。
%sql
select id, MAX(value) FILTER (WHERE key = 'channel') AS channel
from channels
group by id;
我在数据块中有一个非常简单的 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;
我也同意@Lukasz 的回答。
%sql
select id, MAX(value) FILTER (WHERE key = 'channel') AS channel
from channels
group by id;