key val
-----------
A 1
A NULL
B 3
B 2
C NULL
C 10
C 4
查询0:
SELECT key
, CASE WHEN ARRAY_CONTAINS(cs, 1) THEN NULL ELSE m END AS col_max
FROM (
SELECT key
, MAX(val) AS m
, COLLECT_SET(CASE WHEN val IS NULL THEN 1 ELSE 0 END) AS cs
FROM database.table
GROUP BY key ) x;
你也可以使用 SUM() (或 MAX() )而不是使用 COLLECT_SET() . 查询1:
SELECT key
, CASE WHEN cs > 0 THEN NULL ELSE m END AS col_max
FROM (
SELECT key
, MAX(val) AS m
, SUM(CASE WHEN val IS NULL THEN 1 ELSE 0 END) AS cs
FROM database.table
GROUP BY key ) x;
1条答案
按热度按时间3yhwsihp1#
你可以创建一个标志来表示
NULL
他在你的关键小组。然后可以聚合新创建的列并查找是否存在标志,表明至少存在一个标志NULL
在小组里。数据:
查询0:
你也可以使用
SUM()
(或MAX()
)而不是使用COLLECT_SET()
.查询1:
输出: