Интеграция Где, Группировать по и Порядок по предложениям? - PullRequest
0 голосов
/ 25 октября 2018

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

SELECT COUNT(PRODUCT_ID), PRODUCT_ID
FROM ORDER_ITEMS
WHERE 'COUNT(PRODUCT_ID)' > 6
GROUP BY PRODUCT_ID
ORDER BY COUNT(PRODUCT_ID) DESC;

Я получаю эту ошибку от Oracle Apex: ORA-01722: неверный номер

Спасибо!

1 Ответ

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

Первоначальная проблема заключается в том, что вы сравниваете строку с числом 'COUNT(PRODUCT_ID)' > 6, которое выдает сообщение об ошибке.Однако кажется, что вы хотите фильтровать по результатам агрегации.

Для этого есть еще одно предложение, HAVING.Он появляется после предложения group by и может получить доступ к вычислениям, выполненным путем группировки.

SELECT COUNT(PRODUCT_ID), PRODUCT_ID
FROM ORDER_ITEMS
-- where goes here, it cannot access aggregations
GROUP BY PRODUCT_ID
HAVING COUNT(PRODUCT_ID) > 6
ORDER BY COUNT(PRODUCT_ID) DESC;

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

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

Может быть полезно знать, что способ написания SQL-запросов НЕ является последовательностью того, как предложения оцениваются базой данных.Эта последовательность начинается с предложений from и where, затем group by, затем having, затем select и, наконец, order by, то есть:

from
where
group by
having
select
order by

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

...