СУММА (КОЛИЧЕСТВО (*)) в Oracle

#sql #oracle #group-by #oracle11g

#sql #Oracle #группировка по #oracle11g

Вопрос:

Я использую популярную таблицу employee в схеме HR Oracle. Пример данных: https://imgur.com/3Xw6go7 Я пытаюсь узнать количество, а также процент людей, которые имеют одинаковую зарплату из этой таблицы.

Однако я получаю сообщение об ошибке при попытке выполнить следующий запрос :

 SELECT SALARY, count(*),((count(*)/sum(count(*))))*100 FROM EMPLOYEES
group by salary;

ORA-00937: not a single-group group function
00937. 00000 -  "not a single-group group function"
*Cause:    
*Action:
 

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

 SELECT SALARY, count(*),(count(*)/(select sum(count(*)) from employees group by salary))*100 FROM EMPLOYEES
group by salary;
 

Может кто-нибудь рассказать, как достичь моей цели, используя сам первый запрос? Я понимаю, что count() возвращает много строк, тогда как sum (count()) возвращает только 1 строку.

Ответ №1:

Вам не хватает OVER() предложения:

 SELECT SALARY, count(*),
       count(*) * 100 / sum(count(*)) OVER ()
FROM EMPLOYEES
GROUP BY salary;
 

Комментарии:

1. почему мы не добавляем никаких аргументов в предложение over() . Раньше я использовал over() для ранжирования, но я не совсем понял, как это используется здесь.

2. Потому что вы хотите, чтобы сумма превышала все строки, поэтому нет partition by . Вам не нужна кумулятивная сумма, поэтому ее нет order by . Однако over для оконной / аналитической функции требуется.

3. Теперь, когда я пытаюсь округлить результат % возраста, ВЫБЕРИТЕ ЗАРПЛАТУ, count( ), round(count( ) * 100 / sum(count(*))) OVER() ИЗ ГРУППЫ СОТРУДНИКОВ ПО зарплате; Я получаю другую ошибку: ORA-00923: ИЗ ключевого слова, не найденного там, где ожидалось 00923. 00000 — «ИЗ ключевого слова, не найденного там, где ожидалось»

4. @aravindnk . , , Это было не то, что было в моем ответе, даже до того, как я исправил опечатку. Но проблема заключается в простом балансировании круглых скобок и включении аргумента count() .