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”。