Oracle SQL-在WHERE中比较AVG函数

布谷鸟

我正在尝试为分配编写一些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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章