我似乎无法弄清楚为什么我的查询无法运行。我怀疑问题出在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:无效的数字
谢谢!
答案 0 :(得分:5)
最初的问题是,您正在将字符串与产生错误消息的数字'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
我知道这似乎很奇怪,但是请考虑必须先获取数据才能进行汇总,一旦汇总,我们会忘记不符合Have子句的任何内容,然后排列(选择)列,最后对其余的列进行排序排成所需的行顺序。