Oracle
 sql >> Baza danych >  >> RDS >> Oracle

ORA-00937:Nie jest to funkcja pojedynczej grupy — błąd zapytania

Być może naprawiłeś to za pomocą max ale to nie dlaczego to się dzieje i jest trochę dziwaczne. Twój problem polega na tym, że Twoje podzapytanie, które przekłada się na pojedynczą kolumnę, nie jest zapytaniem zbiorczym, min , maks , suma itp. i dlatego musi być dołączony do grupy przez klauzula. Naprawiłeś to, pakując go w max ponieważ maksimum pojedynczej wartości zawsze będzie stałe.

Ponieważ jednak podzapytanie samo w sobie jest zapytaniem analitycznym i zawsze zwróci tylko jeden wiersz, oczywistą rzeczą jest użycie sprzężenia kartezjańskiego w celu dodania go do zapytania. W składni jawnego łączenia jest to znane jako sprzężenie krzyżowe .

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
                      )

Złączenie kartezjańskie ma złą reputację, ponieważ mnoży liczbę wierszy po jednej stronie sprzężenia przez liczbę wierszy po drugiej stronie. Ma jednak swoje zastosowania, szczególnie w takim przypadku.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy istnieje najlepszy sposób na uniknięcie wykonywania procesu więcej niż raz w Oracle?

  2. Jak sprawić, by MERGE można było serializować?

  3. Powód, dla którego Oracle rozróżnia wielkość liter?

  4. RU czy RUR?

  5. INST_TOP (Oracle R12 INSTANCE_HOME) odkodowane