【问题标题】:Hive Grouping and calculating average by calculating distinctHive 通过计算 distinct 进行分组并计算平均值
【发布时间】:2023-03-03 11:16:02
【问题描述】:

伙计们,我们在 HIVE 中有一个有线要求,但我们无法编写相同的查询

基本上我们有以下数据。

CUSTOMER_NAME PRODUCT_NAME PRICE OCCURANCE ID
customer1,    product1,    20,       1
customer1,    product2,    30,       2
customer1,    product1,    25,       3
customer1,    product1,    20,       1
customer1,    product2,    20,       2

基本上我们要做的就是列出单次出现的 (customer_name,product_name) 的平均价格。

例如对于组合 (customer1,product1) product1 的价格是 25+20/2(客户(1 和 3)的不同出现次数)= 22.5。但是由于我们想按 PRODUCT_NAME 分组,我们也不知道如何计算不同的出现。我用 [] 括号标记了查询,我们认为我们需要做一些更改。

另一方面是这里的内部查询,我们希望选择他们的平均价格将下降到前 5 名的客户。 (这可以正常工作,因为 group by 子句只有一个属性 CUSTOMER_NAME)

select customer_name,product_name,[sum(price)/count(distinct(occurance_id))]
from customer_prd cprd
Join (select customer_name,sum(price)/count(distinct(occurance id))
order by sum group  
by customer_name limit 5)
cprdd
where cprd.customer_name = cprdd.customer_name group by cprd.customer_name,cprd.product_name

预期输出。

 customer1,product1, 20 (avg for occurance ID 1) + 25(average for occurance ID 2)/2 = 22.5
 customer1,product2, 30 + 20/2 = 25

【问题讨论】:

    标签: hadoop hive


    【解决方案1】:

    如果我理解正确,这里唯一的问题似乎是您有重复项。如果您删除重复的出现,那么它是一个简单的分组和平均:

    select customer_name, product_name, avg(price)
    from (
      select distinct customer_name, product_name, price, occurance_id from cprd
    ) t
    group by customer_name, product_name
    

    【讨论】:

    • 请检查内部查询。我需要根据仅客户的价格总和组选择客户,然后按客户名称产品名称对其进行分组。
    • 我已经更新了预期的输出,以使其更加清晰。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 2021-12-07
    • 2020-04-20
    • 2020-06-10
    相关资源
    最近更新 更多