Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

ORA-00937:Bukan fungsi grup grup tunggal - Kesalahan kueri

Anda mungkin telah memperbaikinya dengan max tapi bukan itu mengapa itu terjadi dan sedikit hacky. Masalah Anda adalah bahwa sub-kueri Anda, yang diterjemahkan ke dalam satu kolom bukanlah kueri agregat, min , max , sum dll dan perlu dimasukkan dalam group by ayat. Anda memperbaikinya dengan membungkusnya dengan max karena nilai maksimum dari satu nilai akan selalu konstan.

Namun, karena sub-kueri Anda sendiri adalah kueri analitik dan hanya akan mengembalikan satu baris, hal yang jelas harus dilakukan adalah menggunakan gabungan cartesian untuk menambahkannya ke kueri Anda. Dalam sintaks gabungan eksplisit, ini dikenal sebagai cross join .

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
                      )

Gabungan cartesian memiliki reputasi buruk karena mengalikan jumlah baris di satu sisi gabungan dengan jumlah baris di sisi lain. Namun, ia memiliki kegunaannya, terutama dalam kasus seperti ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mendapatkan Nama Bulan dari Tanggal di Oracle

  2. Python> Koneksi dengan JDBC ke nama layanan Oracle (jaydebeapi)

  3. Oracle Bagaimana membuat daftar hari-hari terakhir dari bulan-bulan antara 2 tanggal

  4. Periksa apakah Tabel Ada di Oracle

  5. Perbarui dengan bergabung sendiri