Ошибка SQL ORA-00979 «не группа по выражению», но я не могу понять, что не так с моей заявкой group-by - PullRequest
2 голосов
/ 12 июня 2019

Я пытаюсь получить все записи 'sp_saleprice' из моей таблицы sales_purchases только в том случае, если sales_person, ответственный за эти записи, ничего не присутствует в 'sp_sup' (т.е. они являются супервизором). Тем не менее, я продолжаю получать следующую ошибку при запуске кода ...

Error report -
SQL Error: ORA-00979: not a GROUP BY expression
00979. 00000 -  "not a GROUP BY expression"
*Cause:    
*Action:

Я не понимаю почему, потому что у меня есть оператор GROUP BY.

Вот модель сущности-отношения https://i.imgur.com/2yNxDmb.png

SELECT p.sp_id, p.sp_fname, p.sp_lname, sp.sp_invoice,
'$' || to_char (MAX (sp_saleprice), 'FM999999999.99') "Max",
'$' || to_char (MIN (sp_saleprice), 'FM999999999.99') "Min",
'$' || to_char (SUM (sp_saleprice), 'FM999999999.99') "Total",
'$' || to_char (MEDIAN (sp_saleprice), 'FM999999999.99') "Median",
COUNT(sp_saleprice) AS AMOUNT
FROM sales_purchases sp, sales_persons p
WHERE sp.sp_id = p.sp_id
    AND sp_sup IN (
        SELECT sp_sup
        FROM sales_persons p
        WHERE sp_sup IS NULL)
GROUP BY p.sp_id, p.sp_fname, p.sp_lname, p.sp_sup;

1 Ответ

0 голосов
/ 12 июня 2019

Ваш запрос выбирает без агрегирования столбцов:

p.sp_id, p.sp_fname, p.sp_lname, sp.sp_invoice

, но ваш GROUP BY находится в столбцах

p.sp_id, p.sp_fname, p.sp_lname, p.sp_sup

Последний в этих списках отличается.

Я ожидал получить все записи о продажах для sales_purchases, где у продавца в sales_persons нет выделенного sp_sup (supervisor), что означало бы, что они сами являются наблюдателями.Когда я запускаю запрос, я просто получаю «не выбранные строки» в качестве ответа, когда у меня должно быть десять результатов

AND sp_sup IN ( SELECT sp_sup FROM sales_persons p WHERE sp_sup IS NULL )

Собирается исключить все строки, так как вложенный выбор всегда будет возвращатьсяNULL значений.

Почему бы просто не использовать:

SELECT p.sp_id,
       p.sp_fname,
       p.sp_lname,
       sp.sp_invoice,
       '$' || to_char (MAX (sp_saleprice), 'FM999999999.99') "Max",
       '$' || to_char (MIN (sp_saleprice), 'FM999999999.99') "Min",
       '$' || to_char (SUM (sp_saleprice), 'FM999999999.99') "Total",
       '$' || to_char (MEDIAN (sp_saleprice), 'FM999999999.99') "Median",
       COUNT(sp_saleprice) AS AMOUNT
FROM   sales_purchases sp
       INNER JOIN sales_persons p
       ON ( sp.sp_id = p.sp_id )
WHERE  sp_sup IS NULL
GROUP BY p.sp_id, p.sp_fname, p.sp_lname, sp.sp_invoice;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...