【发布时间】:2020-10-30 23:27:12
【问题描述】:
我有一个查询,我想计算某个产品在其类别中的销售额百分比。因此,我计算每个产品的销售额并使用分析函数并按类别划分。
SELECT product_id, SUM(sales)/(SUM(sales) OVER(PARTITION BY category))
FROM table1
GROUP BY product_id
我收到此错误消息:
AnalysisException: select list expression not produced by aggregation output (missing from GROUP BY clause?): sum(sales) / ((sum(sales) OVER (PARTITION BY category)))
有谁知道如何解决这个问题以及为什么会这样?
【问题讨论】:
-
product_id是唯一值吗?因为如果是这样,group by product_id对我来说没有任何意义。 -
你能试试
SELECT product_id, sales / SUM(sales) OVER(PARTITION BY category) FROM table1;吗? -
正确,product_id 是唯一的。如果我这样写,则查询有效: SELECT product_id, SUM(sales) OVER(PARTITION BY category) FROM table1;如果我只写: SELECT product_id, sales / SUM(sales) OVER(PARTITION BY category) FROM table1;它不会只取每个 product_id 的第一个可用销售值吗? (table1 中的每一行都是一个产品和一个日期)。我认为我需要对每个 product_id 在定义的时间段内的销售额求和,然后除以该类别的销售额总和,以获得正确的百分比值。
-
我不这么认为,但是您可以尝试使用一些值,我的意思是使用一个包含十条记录的小表,然后手动计算预期结果并查看查询产生的结果。这就是我所做的。如果您尝试,请告诉我。
标签: sql group-by impala analytic-functions