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 で合計金額を特定の月の日数で割って、1 日の請求額を計算しようとしました。まず、「YYYYMM」の形式の会計期間を取得し、その最終日を見つけて、28、29、30、または 31 日が含まれているかどうかを計算します。

しかし、私がこれを実行しようとするたびに、それは私に与えます*ORA-00937: not a single-group group function*. 誰でもこの状況について助けてもらえますか?

4

4 に答える 4

2

記録として、ここでの問題は、SELECT リストにグループ関数非グループ関数 (サブクエリ) があることです。

グループなしでグループ関数を使用 できます。たとえばselect count(*), sum(object_id) from all_objects 、正常に機能しますが、非グループ関数を含めるとすぐに、次の方法でグループに含める必要があります。

ダメ: 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 に答える
2

これを使用して、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 に答える
-1

「ORA-00937: 単一グループのグループ関数ではありません」

このエラーは、MAX、MIN、SUM などの集計関数を GROUP BY 句を使用せずに使用すると発生します。

于 2013-08-13T11:57:17.910 に答える