Sql 如何更正从子查询聚合时的错误
我有一个如下的查询:Sql 如何更正从子查询聚合时的错误,sql,hive,Sql,Hive,我有一个如下的查询: SELECT store_id, (CASE WHEN txns_A>0 AND txns_B=0 THEN 'A Only' WHEN txns_A=0 AND txns_B>0 THEN 'B Only' END) A_B_indicator, sum(1) cnt_customers, sum(spend_A+spend_B)/sum(txns_A+txns_B) avg_receipt FROM( SELECT store_id, cust_id
SELECT store_id,
(CASE WHEN txns_A>0 AND txns_B=0 THEN 'A Only' WHEN txns_A=0 AND txns_B>0 THEN 'B Only' END) A_B_indicator,
sum(1) cnt_customers,
sum(spend_A+spend_B)/sum(txns_A+txns_B) avg_receipt
FROM(
SELECT store_id, cust_id
SUM(CASE WHEN A_B_indicator='A' THEN spend else 0 end) spend_A,
SUM(CASE WHEN A_B_indicator='B' THEN spend else 0 end) spend_B,
SUM(CASE WHEN A_B_indicator='A' THEN spend else 0 end) txns_A,
SUM(CASE WHEN A_B_indicator='B' THEN spend else 0 end) txns_B
FROM table1
GROUP BY store_id, cust_id
) table2;
但是,这会生成一个错误,因为store_id不在GROUP BY
子句中。当我重写查询以包含groupbystore\u id
子句时,它会抱怨聚合列不在groupby
中。但是,如果我通过将Group by
重写为Group by 1,2,3,4
来添加它们,这也会生成一个错误(尚未支持UDAF Sum的位置
)
如何将此查询重写为无错误?您可以这样写:
SELECT store_id,
(CASE WHEN SUM(txns_A) > 0 AND SUM(txns_B) = 0 THEN 'A Only'
WHEN SUM(txns_A) = 0 AND SUM(txns_B) > 0 THEN 'B Only'
END) as A_B_indicator,
COUNT(*) as cnt_customers,
SUM(spend_A+spend_B)/sum(txns_A+txns_B) as avg_receipt
FROM (SELECT store_id, cust_id
SUM(CASE WHEN A_B_indicator='A' THEN spend else 0 end) as spend_A,
SUM(CASE WHEN A_B_indicator='B' THEN spend else 0 end) as spend_B,
SUM(CASE WHEN A_B_indicator='A' THEN spend else 0 end) as txns_A,
SUM(CASE WHEN A_B_indicator='B' THEN spend else 0 end) as txns_B
FROM table1
GROUP BY store_id, cust_id
) table2
GROUP BY store_id;
非常感谢。正如我所理解的,您的方法是在case语句中使用聚合函数,以避免在Group By中包含这些行?这是因为SQL不需要将SUM、COUNT等聚合函数包含在groupby?@Caerus。其目的是实现您想要的逻辑,这可能是“A Only”意味着每个
存储id
的所有行上的“A Only”。