我们有一个如下所示的Hive表:
我们希望看到如下输出:
对于每个日期,显示购买每种水果的客户的数量。如果当天没有人购买水果,则将其替换为0代替NULL。任何实现此目标的Apache查询都受到高度赞赏
更新: 只有四种产品:苹果,香蕉,葡萄和橙子。我们不希望找到不同的日期和不同的产品。
答案 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 join
和group 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
,因此需要“生成”原始数据中以外的数据组合。