GROUP BY不是NULL值

时间:2017-11-16 22:35:19

标签: mysql group-by hive

我有一个 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

我想对列GROUP BY执行Y操作,其值不是NULL。此外,我想保留NULL的{​​{1}}值。所以结果表看起来像:

Y

注意,我不关心选择哪个X.

基于this question,我的查询将是:

X      Y
-------------
1      a
1      b
2      c
2      NULL
1      NULL
2      d

但是,如果SELECT IFNULL(Y, UUID()) AS unq_Y, any(X) AS X FROM my_table GROUP BY unq_Y unq_Y,则UUID()将为Y返回,查询结果为:

NULL

我该如何避免这种情况?

2 个答案:

答案 0 :(得分:2)

事实证明,我可以将NULL检查放在GROUP BY条款中:

SELECT 
    any(Y) AS Y,
    any(X) AS X
FROM my_table 
GROUP BY COALESCE(Y, CAST(reflect("java.util.UUID", "randomUUID") AS STRING));

我的Hive版本不支持IFNULL(),因此COALESCE()是一个不错的选择。我的版本Hive也不支持UUID(),因此我致电reflect()以获取唯一ID。

答案 1 :(得分:0)

如果结果集的顺序不重要,那就很简单了。只需使用union all,如下所示:

SELECT     
    X AS X,
    Y AS unq_Y
FROM my_table 
where y is not null
GROUP BY unq_Y
    union all
SELECT     
    X AS X,
    Y AS unq_Y
FROM my_table 
where y is null
;

DEMO

希望它有所帮助!