一个SQL子查询的问题,望高手来解释一下,小弟刚学SQL

来源:百度知道 编辑:UC知道 时间:2024/06/28 00:02:53
SELECT 0.PARTNUM, SUM(O.QUANTITY*P.PRICE), COUNT(PARTNUM)
FROM ORDERS 0, PART P
WHERE P.PARTNUM = O.PARTNUM
GROUP BY O.PARTNUM
HAVING SUM(0.QUANTITY * P.PRICE) > (SELECT AVG(01.QUANTITY*P1.PRICE)
FROM PART P1, ORDERS O1
WHERE P1.PARTNUM = O1.PARTNUM
AND P1.PARTNUM = 01.PARTNUM)
一直到Group by那里都能看得懂,是根据每个商品Part的编号来查每个商品总共卖出多少钱,就是HAVING SUM(...)这里不明白,它的总价可能意思是跟所有商品编号分组总价的平均值来比,但是不了解为什么后面那个子查询是表示这个意思,尤其是P1.PARTNUM = 0.PARTNUM
小弟刚学SQL,希望高手能指教一下,谢谢了.
是,写错了,最后一个是AND P1.PARTNUM = O.PARTNUM

(SELECT AVG(01.QUANTITY*P1.PRICE)
FROM PART P1, ORDERS O1
WHERE P1.PARTNUM = O1.PARTNUM
AND P1.PARTNUM = 01.PARTNUM)

having后的这个子查询有点问题,where后面的2个条件是一样的,是不是你的笔误?

根据having子句可以看出一点问题,select子查询其实就是查出orders表中的平均价格,而SUM(0.QUANTITY * P.PRICE)是orders表的总价格
总价格>平均价格,这个条件必然成立。

总的说,这个sql语句问题多多,逻辑有点乱

条件满足 SUM(0.QUANTITY * P.PRICE) > (SELECT AVG(01.QUANTITY*P1.PRICE)的

这个语句有问题的,
首先最后的那个条件是错误的应该是O1而不是零一,
其次,相同的查询条件写一次就可以了,不必要写两次(或者是其他查询条件写错了)
至于Having 后面条件就是分组后的条件,你的理解是对的