Oracle
 sql >> база данни >  >> RDS >> Oracle

ORA-00937:Не е групова функция за една група - грешка в заявката

Може да сте го поправили с max но това не е защо това се случва и е малко хакерско. Вашият проблем е, че вашата подзаявка, която се превежда в една колона, не е обобщена заявка, min , макс. , сума и т.н. и затова трябва да бъде включен в group by клауза. Поправихте това, като го обвихте в max тъй като максимумът на една стойност винаги ще бъде постоянен.

Въпреки това, тъй като вашата подзаявка сама по себе си е аналитична заявка и ще върне само един ред, очевидното нещо, което трябва да направите, е да използвате декартово съединение, за да го добавите към вашата заявка. В изричния синтаксис на присъединяване това е известно като кръстосано присъединяване .

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle не може да съхранява емотикони

  2. Oracle Преобразува TIMESTAMP с часова зона в DATE

  3. как да изчислявате диапазони в Oracle

  4. ORA-29908:липсващо първично извикване за спомагателен оператор

  5. Въздействие от дефинирането на колона VARCHAR2 с по-голяма дължина