如何在 HIVEQL 中使用 group by 计数包含 0 个结果
how to include 0 results in count with group by in HIVEQL
我是 HIVE 的新手。我想在结果中包含 0 行
我有一个table喜欢
- - - - - - - - - - - - - - -
data_source_id, part_hour, ...
- - - - - - - - - - - - - - -
这是我的查询
SELECT data_source_id, COUNT(*) as count
FROM data_source
WHERE part_hour = 2022041618
GROUP BY data_source_id;
示例结果是
data_source_id, count
12 , 35
13 , 36
但我想要的结果是
data_source_id, count
12 , 35
13 , 36
15. , 0
我怎样才能得到 0 的结果?
您可以这样做,但您需要删除 where 子句。
SELECT data_source_id,
SUM(case when part_hour = 2022041618 then 1 else 0 end ) as count
FROM data_source
GROUP BY data_source_id;
您也可以使用自连接。
编辑 - 我根据您的需要在下面进行了更改 SQL。如果您在部分时间和 data_source_id 上有分区,您的 SQL 应该很快。
select distinct d.data_source_id, nvl(rs.count,0)
FROM
(select distinct data_source_id from data_source) d
left join (SELECT data_source_id, COUNT(*) as count
FROM data_source
WHERE part_hour = 2022041618
GROUP BY data_source_id) rs on rs.data_source_id=d.data_source_id;
我是 HIVE 的新手。我想在结果中包含 0 行
我有一个table喜欢
- - - - - - - - - - - - - - -
data_source_id, part_hour, ...
- - - - - - - - - - - - - - -
这是我的查询
SELECT data_source_id, COUNT(*) as count
FROM data_source
WHERE part_hour = 2022041618
GROUP BY data_source_id;
示例结果是
data_source_id, count
12 , 35
13 , 36
但我想要的结果是
data_source_id, count
12 , 35
13 , 36
15. , 0
我怎样才能得到 0 的结果?
您可以这样做,但您需要删除 where 子句。
SELECT data_source_id,
SUM(case when part_hour = 2022041618 then 1 else 0 end ) as count
FROM data_source
GROUP BY data_source_id;
您也可以使用自连接。
编辑 - 我根据您的需要在下面进行了更改 SQL。如果您在部分时间和 data_source_id 上有分区,您的 SQL 应该很快。
select distinct d.data_source_id, nvl(rs.count,0)
FROM
(select distinct data_source_id from data_source) d
left join (SELECT data_source_id, COUNT(*) as count
FROM data_source
WHERE part_hour = 2022041618
GROUP BY data_source_id) rs on rs.data_source_id=d.data_source_id;