Oracle SQL: ORA-00937: не групповая функция для одной группы - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь вычислить сумму денег, заработанную хирургом с ID 118 в 2016 году

Используя код:

    select (sum(count(*) * professional_fee)) AS 
    "Total amount earned by 118"
    from operation, operation_type, staff
    where operation.actual_op = operation_type.op_code
    and staff.person_id = operation.surgeon
    and surgeon = 118
    and extract(YEAR from op_date) = 2016
    group by professional_fee;

Я могу получить правильный результат 9600

Однако, когда я добавляю

    select (sum(count(*) * professional_fee) **+ annual_basic_salary**) AS 
    "Total amount earned by 118"
    from operation, operation_type, staff
    where operation.actual_op = operation_type.op_code
    and staff.person_id = operation.surgeon
    and surgeon = 118
    and extract(YEAR from op_date) = 2016
    group by professional_fee, **annual_basic_salary**;

, я получаю сообщение об ошибке: ORA-00937: не групповая функция для одной группы

Вот таблицы, используемые:

Персонал

Операция

Тип операции

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Будет ли что-то подобное делать?(Я сократил ваши таблицы; мне не хотелось печатать слишком много.)

Я не исправил ваш запрос, а скорее написал новый.Я не знаю, почему вы использовали функцию COUNT;на что ты рассчитывал?Если вы все равно хотите использовать свой код, посмотрите, что написал @LoztInSpace, и мой комментарий под этим ответом.

Также я попытался правильно объединить таблицы и использовать псевдонимы таблиц для всех столбцов.Я предлагаю вам сделать то же самое в будущем.Без этого трудно угадать, к какой таблице принадлежат эти столбцы.

SQL> with
  2  operation (actual_op, surgeon, op_date) as
  3    (select 'LO', 118, date '2016-05-06' from dual union all
  4     select 'HT', 118, date '2016-05-06' from dual union all
  5     select 'TS', 118, date '2016-05-07' from dual union all
  6     select 'TS', 111, date '2016-01-01' from dual
  7    ),
  8  operation_type (op_code, operation_name, professional_fee) as
  9    (select 'LO', 'Lobotomy'        , 1050 from dual union all
 10     select 'HT', 'Heart Transplant', 7500 from dual union all
 11     select 'TS', 'Tonsillectomy'   , 1050 from dual union all
 12     select 'AP', 'Appendicectomy', 750 from dual
 13    ),
 14  staff (person_id, annual_basic_salary) as
 15    (select 118, 20000 from dual union all
 16     select 111,  8000 from dual
 17    )
 18  select sum(t.professional_fee) + s.annual_basic_salary as result
 19  from operation_type t join operation o on o.actual_op = t.op_code
 20  join staff s on s.person_id = o.surgeon
 21  where s.person_id = 118
 22    and extract(year from o.op_date) = 2016
 23  group by s.annual_basic_salary;

    RESULT
----------
     29600

SQL>
0 голосов
/ 20 октября 2018

Я не понимаю вашу группу.Вы уверены, что хотите?

Интуитивно это выглядит как + max (year_basic_salary)

Нет группы по:

select (sum(professional_fee))+max(annual_basic_salary) AS 
    "Total amount earned by 118"
    from operation, operation_type, staff
    where operation.actual_op = operation_type.op_code
    and staff.person_id = operation.surgeon
    and surgeon = 118
    and  extract(year from o.op_date) = 2016
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...