在HAVING子句中使用子查询

时间:2019-07-19 11:17:39

标签: mysql

我正在尝试查询所有产品(PRODUCTO_NO)中UNIDADES的平均数量是否大于UNIDADES的平均数量。为此,我正在尝试:

SELECT *
FROM productos
WHERE PRODUCTO_NO IN (SELECT PRODUCTO_NO
FROM pedidos p1
GROUP BY PRODUCTO_NO
HAVING AVG(p1.UNIDADES)>=ALL(SELECT AVG(UNIDADES)
FROM pedidos 
GROUP BY PRODUCTO_NO)
);

问题是,尽管这可能可行,但我必须使用“> =”,因为如果我使用“>”,结果将是一个空集(因为我将每个产品与其自身进行比较)。这就是为什么我尝试进行相关子查询的原因:

SELECT *
FROM productos
WHERE PRODUCTO_NO IN (SELECT PRODUCTO_NO
FROM pedidos p2
HAVING AVG(p2.UNIDADES)>ALL(SELECT AVG(p1.UNIDADES)
FROM pedidos p1
WHERE p2.PRODUCTO_NO=p1.PRODUCTO_NO AND p2.UNIDADES<>p1.UNIDADES
)
);

但这似乎也不起作用(它返回一个空集)。我什至尝试使用GROUP BY:

SELECT *
FROM productos
WHERE PRODUCTO_NO IN (SELECT PRODUCTO_NO
FROM pedidos p2
GROUP BY PRODUCTO_NO
HAVING AVG(p2.UNIDADES)> ALL(SELECT AVG(p1.UNIDADES)
FROM pedidos p1
WHERE p2.UNIDADES<>p1.UNIDADES
GROUP BY p1.PRODUCTO_NO
  )
 );

但是在这里我得到了错误1054(42S22):“ where子句”中的未知列

0 个答案:

没有答案