sql >> Database teknologi >  >> RDS >> Oracle

ORA-00937:Ikke en enkeltgruppegruppefunktion - Forespørgselsfejl

Du har muligvis rettet det med max men det er ikke hvorfor det sker og er en lille smule hacky. Dit problem er, at din underforespørgsel, som oversættes til en enkelt kolonne, ikke er en samlet forespørgsel, min , max , sum osv. og skal derfor inkluderes i en gruppe efter klausul. Du løste dette ved at pakke det ind i max da maksimum af en enkelt værdi altid vil være konstant.

Men da din underforespørgsel i sig selv er en analytisk forespørgsel og kun vil returnere én række, er den oplagte ting at gøre at bruge en kartesisk join til at tilføje den til din forespørgsel. I den eksplicitte joinsyntaks er dette kendt som krydsforbindelse .

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
                      )

Den kartesiske joinforbindelse har et dårligt ry, da den multiplicerer antallet af rækker på den ene side af sammenføjningen med antallet af rækker på den anden. Det har dog sine anvendelser, især i denne slags tilfælde.



  1. Den aktuelle tilstand af Open Source Backup Management til PostgreSQL

  2. Hvordan finder man mindst ikke-nul kolonne i en bestemt række i SQL?

  3. Få rangering af en række i mysql-forespørgsel

  4. MYSQL_ROOT_PASSWORD er indstillet, men får adgang nægtet for brugeren 'root'@'localhost' (ved hjælp af adgangskode:JA) i docker-container