2016-03-23 4 views
0

Мне нужно получить некоторые данные (Oracle RDBMS). Я должен их отфильтровать, чтобы схватить их. Поэтому я подумал о трех вложенных запросах.
Начиная с внешней стороны: запрос для ограничения запроса для их сортировки и запрос для выбора (который также фильтрует и группирует их). Это запрос:ORA-00937: это не групповая функция только для одной группы

@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 ") 

Но это дает мне эту ошибку: ORA-00937: it is not a group function on only one grouping

Почему?

+0

Кажется, что вы извлекаете НАВЫКУ, не используя его в разделе GROUP BY. – Aleksej

+0

Нет, извините, я написал неправильно, я использую его – panagulis72

ответ

1

Вы должны указать все столбцы, выбранные в group by пункте:

@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 ") 

Кроме того, вы уже рассчитали количество personCount, вам не нужно считать это снова.

Обратите внимание, что я заменил столбец знаний столбцом умения в группе, я предположил, что это опечатка.

+0

Да, теперь это работает. Я был не прав, чтобы написать в коде моего вопроса. Еще раз спасибо! – panagulis72

1

Вы не должны делать подсчет в выносном выберите:

@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 ") 
Смежные вопросы