配置单元查询

时间:2019-03-01 20:25:15

标签: sql hadoop hive hiveql

我们有一个如下所示的Hive表:

Hive Table

我们希望看到如下输出:

Output

对于每个日期,显示购买每种水果的客户的数量。如果当天没有人购买水果,则将其替换为0代替NULL。任何实现此目标的Apache查询都受到高度赞赏

更新: 只有四种产品:苹果,香蕉,葡萄和橙子。我们不希望找到不同的日期和不同的产品。

2 个答案:

答案 0 :(得分:0)

如果您的RDMS支持COUNT(DISTINCT ...),那是一个简单的聚合查询:

SELECT mydate, product, COUNT(DISTINCT customer)
FROM mytable
GROUP BY mydate, product

PS:命名列date通常不是一个好主意,因为这与同名sql数据类型冲突。我在查询中将其更改为mydate


如果没有COUNT(DISTINCT ...),则需要使用子查询:

SELECT mydate, product, COUNT(*)
FROM (SELECT DISTINCT mydate, product, customer FROM mytable) x
GROUP BY mydate, product

答案 1 :(得分:0)

使用cross join生成行,然后使用left joingroup by进行计算:

select d.date, p.product, count(t.date) 
from (select distinct date from t) d cross join
     (select distinct product from t) p left join
     t
     on t.date = d.date and t.product = p.product
group by d.date, p.product
order by d.date, p.product;

您需要cross join的提示是,一些返回的计数是0,因此需要“生成”原始数据中以外的数据组合。