为何创建视图的SQL报invalid use of group function错误?
报错产生原因
触发invalid use of group function(分组函数无效使用)的核心原因是SQL语句中出现了同层级非法嵌套聚合函数的写法,具体问题出在最内层的子查询:
SELECT MAX(SUM(PURCHASE_AMT)) FROM ORDERS GROUP BY Customer_id, Ord_Date
SQL同查询块中,聚合函数的计算是基于GROUP BY生成的分组结果执行的:SUM(PURCHASE_AMT)是分组完成后才能得到的每个分组的单值结果,而MAX()如果要取所有分组SUM结果的最大值,不能直接把SUM()写在MAX()的入参位置——两个聚合函数属于不同的计算层级,数据库无法在同一个查询块里同时完成「逐分组计算总金额」和「跨分组取总金额最大值」两个步骤,因此抛出语法错误。
修正方案
你需要把两层聚合逻辑拆分到不同的查询层级,先通过派生表计算出每个(Customer_id, Ord_Date)分组的总金额,再在外层查询对总金额取最大值,修正后的完整建视图语句如下:
CREATE VIEW SALESMAN_WITH_MAX_ORDER AS SELECT DISTINCT S.Salesman_id, S.Name, S.City, S.Commission FROM SALESMAN S INNER JOIN CUSTOMER C ON S.Salesman_id = C.Salesman_id WHERE C.Customer_id IN ( SELECT Customer_id FROM ORDERS GROUP BY Customer_id, Ord_Date HAVING SUM(PURCHASE_AMT) = ( SELECT MAX(group_purchase_amt) FROM ( SELECT SUM(PURCHASE_AMT) AS group_purchase_amt FROM ORDERS GROUP BY Customer_id, Ord_Date ) AS group_total ) );
注:原语句用逗号写法做隐式内连接,补充
DISTINCT是为了避免关联时出现重复的销售员记录。
内容的提问来源于stack exchange,提问作者cxtherxne
相关产品推荐
相关产品推荐

