2

SQL查询:

      SELECT SUM (gross_amount) /
           (SELECT TO_CHAR (
                  LAST_DAY (TO_DATE (MAX (accounting_period), 'YYYYMM')),
                 'DD') 
           FROM t_beta_invoice)
       FROM t_beta_invoice_details

我试图通过将总金额除以表 t_beta_invoice 中给定月份的天数来计算每日发票金额。首先,我得到会计期间,格式为“YYYYMM”,并找到它的最后一天来计算它是否包含 28、29、30 或 31 天。

但是每当我尝试运行它时,它都会给我*ORA-00937: not a single-group group function*。任何人都可以帮助解决这种情况吗?

4

4 回答 4

2

尝试使用它并确保第二个查询不返回 0。

select

(SELECT SUM (gross_amount)      
           FROM t_beta_invoice_details)
 /

 (SELECT TO_CHAR (LAST_DAY (TO_DATE (MAX (accounting_period), 'YYYYMM')), 'DD') 
           FROM t_beta_invoice)
FROM DUAL;
于 2013-08-13T11:58:38.010 回答
2

作为记录,这里的问题是您在 SELECT 列表中有一个组函数一个非组函数(子查询)。

可以在没有 group by 的情况下使用 group 函数:例如 select count(*), sum(object_id) from all_objects 可以正常工作,但是一旦包含非 group 函数,您就需要将它放在 group by 中:

不好:从 all_objects 中选择 object_type、count(*)、sum(object_id)

ORA-00937: not a single-group group function

工作正常:

select object_type, count(*), sum(object_id) group by object_type

因此,在您的查询中,子查询是问题所在。问题是你不能拥有 GROUP BY (子查询),因为你会得到ORA-22818: subquery expressions not allowed here.

但是(至少在 11g 中)这里有一个有趣的转折:如果你添加 GROUP BY (一些常数)你可以让它工作:

e.g. select (select dummy from dual) as test, sum(1) from dual

ORA-00937: not a single-group group function

select (select dummy from dual) as test, sum(1) from dual group by 'huh?'

作品。

否则,您必须按照 valex 的建议将 SUM 查询与“会计期间”子查询分开。

于 2013-08-13T14:10:53.443 回答
0

您收到ORA-00937是因为“SELECT列表不能同时包含组函数,例如AVG, COUNT, MAX, MIN, SUM, STDDEV, orVARIANCE和单个列表达式,除非单个列表达式包含在GROUP BY子句中。”

一种可能的(丑陋的)解决方案是将 委托SUM给子查询。

SELECT 
    (SELECT SUM(gross_amount) FROM t_beta_invoice_details) /
    (SELECT TO_CHAR(LAST_DAY(TO_DATE(MAX(accounting_period),'YYYYMM')),'DD') 
     FROM t_beta_invoice)
FROM DUAL;

也许更优雅(但不多)会使用JOIN.

SELECT SUM (t.gross_amount) / x.days
FROM t_beta_invoice_details t,
(SELECT TO_CHAR(LAST_DAY(TO_DATE(MAX(accounting_period),'YYYYMM')),'DD') as days
 FROM t_beta_invoice) x
GROUP BY x.days;

希望有帮助。

于 2013-08-13T13:38:42.490 回答
-1

'ORA-00937: 不是单组组函数'

如果在不使用 GROUP BY 子句的情况下使用 MAX、MIN、SUM 等聚合函数,则会出现此错误。

于 2013-08-13T11:57:17.910 回答