我正在尝试为分配编写一些Oracle SQL脚本。除了一部分之外,我已经设法使所有这些工作。总而言之,如果表A中1列的平均值大于表B中另一列的平均值,则必须显示2个表中的数据。我意识到您无法在WHERE子句或HAVING子句中包含AVG函数,因为它似乎无法正确访问数据(根据我的读物)。当我排除此子句时,脚本会正确执行,因此我相信没有其他错误。
我尝试按照以下方式编写它,但是得到的错误是ORA-00936:缺少表达式,它就在>符号之前。我以为这可能是由于支架放置不当造成的,但是我的尝试都没有解决这个问题。这是我的尝试:
SELECT l.l_category, SUM(r.r_sold), AVG(l.l_cost)
FROM promos l
INNER JOIN sales r
ON r.promo_id = l.promo_id
GROUP BY l.l_category
HAVING (SELECT AVG(l.l_cost) OVER (PARTITION BY l.l_cost)) >
(SELECT AVG(r.r_sold) OVER (PARTITION BY r.r_sold));
我尝试在没有OVER(PARTITION BY ...)的情况下执行此操作,并将其放入WHERE子句中,但它无法解决错误。我很确定我需要以某种方式将其放入SELECT语句中,但是我很茫然。
在HAVING子句中应用聚合函数时,无需使用OVER子句。只需自己使用聚合函数。
SELECT l.l_category, SUM(r.r_sold), AVG(l.l_cost)
FROM promos l
INNER JOIN sales r
ON r.promo_id = l.promo_id
GROUP BY l.l_category
HAVING HAVING AVG(l.l_cost) > AVG(r.r_sold)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句