2016-03-23 16 views
0

bir grup işlevi değil Bazı verileri almam gerekiyor (Oracle RDBMS). Onları gruplamak için filtrelemeliyim. Bu yüzden üç iç içe geçmiş sorgu yapmayı düşündüm.
Dışarıdan başlayarak: bir sorguyu sıralama ve seçim için bir sorguyu kısıtlamak için bir sorgu (ayrıca bunları filtreleyin ve gruplandırın). Bu sorgu ise:ORA-00937: yalnızca bir gruplamada

@SqlQuery("select count(*) personCount, SURNAME surname, SKILL skill, ROWNUM " + 
     "  from (select * " + 
     "  from (select count(*) personCount, SURNAME surname, SKILL skill from people " + 
     "   where ....my filters.... 
     "   group by SURNAME, SKILL) " + 
     "  order by personCount DESC) " + 
     "  where ROWNUM \\<= :limit ") 

Ama bana bu hata veriyor: ORA-00937: it is not a group function on only one grouping

Neden?

Harici içinde sayımı yapmamalısın
+0

GRUP BY yan tümce – Aleksej

+0

kullanmadan ayıklanıyor gibi görünüyor Üzgünüm yanlış yazdım, kullanıyorum – panagulis72

cevap

1

Sen group by fıkrada seçmek tüm sütunları belirtmek zorunda: Ayrıca

@SqlQuery("select personCount, SURNAME surname, SKILL skill, ROWNUM " + 
     "  from (select * " + 
     "  from (select count(*) personCount, SURNAME surname, SKILL skill from people " + 
     "   where ....my filters.... " + 
     "   group by SURNAME, SKILL) " + 
     "  order by personCount DESC) " + 
     "  where ROWNUM \\<= :limit ") 

, zaten sayımı hesaplanmış personCount, tekrar saymanıza gerek yok.

Bilgi sütununu gruptaki yetenek sütunuyla değiştirdiğimi, yazım hatası olduğunu farz ettim.

+0

Evet şimdi çalışır. Sorumun kodunda yazmak yanlıştı. Tekrar teşekkürler! – panagulis72

1

belirleyin:

@SqlQuery("select personCount, surname, skill, ROWNUM " + 
     "  from (select * " + 
     "  from (select count(*) personCount, SURNAME surname, SKILL skill from people " + 
     "   where ....my filters.... " 
     "   group by SURNAME, SKILL) " + 
     "  order by personCount DESC) " + 
     "  where ROWNUM \\<= :limit ")