sql >> データベース >  >> RDS >> Oracle

ORA-00937:単一グループのグループ関数ではありません-クエリ・エラー

    maxで修正した可能性があります しかし、それは理由ではありません それは起こっており、少しハッキーです。問題は、単一の列に変換されるサブクエリが集計クエリ minではないことです。 、 max sum などなど、 group byに含める必要があります 句。 maxでラップすることでこれを修正しました 単一の値の最大値は常に一定であるためです。

    ただし、サブクエリはそれ自体が分析クエリであり、1行しか返さないため、明らかに行うべきことは、デカルト結合を使用してクエリに追加することです。明示的な結合構文では、これは相互結合

    select count(*) todas
         , sum(case when i.prioridade = 1 then 1 else 0 end) urgente
         , sum(case when i.prioridade = 2 then 1 else 0 end) alta
         , sum(case when i.prioridade = 3 then 1 else 0 end) normal
         , sum(case when i.prioridade = 4 then 1 else 0 end) baixa
         , naoAvaliados
         , sum(case when i.situacao = 'P' then 1 else 0 end) pendentes
         , sum(case when i.situacao = 'A' or i.situacao = 'I' then 1 else 0 end) iniciados
      from GMITEMOS i 
     cross join (select count(*) as naoAvaliados
                   from GMITEMOS j
                  inner join GMCTLSLA k
                     on k.os = j.cd_numero_os 
                    and k.item = j.item
                  where j.situacao in ('A', 'I', 'P')
                    and k.ordem = 99999
                        )
     where i.situacao in ('A', 'I', 'P')
       and exists (select 1 
                     from GMCTLSLA c 
                    where c.os = i.cd_numero_os 
                      and c.item = i.item
                          )
    

    デカルト結合は、結合の一方の行数にもう一方の行数を掛けるため、評判が悪くなります。ただし、特にこの種の場合には、用途があります。



    1. mysqlの式で最後に挿入されたIDを取得する

    2. PerconaXtraDBクラスターKubernetesオペレーターの概要

    3. ノードjsmysqlクエリのスラッシュを削除します

    4. DB::raw式を使用したPOINT/POLYGONなどのLaravelモデル