【发布时间】:2018-04-30 14:48:44
【问题描述】:
我有一个 Hive 表(无主键),类似于:
X Y
-------------
1 a
2 a
2 a
1 b
1 b
2 c
2 NULL
1 NULL
2 d
请注意,X 列可以是 1 和 2 以外的值。
如果我不想做GROUP BY 的查询是:
SELECT X, Y
FROM my_table
我想对列Y 执行GROUP BY 操作,其中值不是NULL。此外,我想保留Y 的NULL 值。所以结果表看起来像:
X Y
-------------
1 a
1 b
2 c
2 NULL
1 NULL
2 d
注意,我不在乎选择了哪个 X。
基于this question,我的查询是:
SELECT
IFNULL(Y, UUID()) AS unq_Y,
any(X) AS X
FROM my_table
GROUP BY unq_Y
但是,如果Y 是NULL,则unq_Y 将是UUID() 返回的任何内容,查询结果将是:
X unq_Y
-------------
1 a
1 b
2 c
2 UUID()_result
1 UUID()_result
2 d
我怎样才能避免这种情况?
【问题讨论】:
-
我添加了
mysql标签,因为同样的问题也适用(尽管解决方案可能不同)。 -
您没有 PRIMARY KEY,这可能会在适当的时候证明有问题