2

[编辑] 有人告诉我查询中有一个子查询,所以这就是我想出的内容以及现在要处理的内容。[新代码]

 SELECT P.prodid, P.prodname, SUM(O.qtysold) AS "TOTAL SALES"
 FROM ORDERLINE O
 INNER JOIN PRODUCT P
 ON O.prodid = P.prodid
 INNER JOIN ALLOCATION A
 ON P.prodid = A.prodid
 GROUP BY P.prodid, P.prodname
 HAVING (SELECT AVG(score) AS score
            FROM QUALITYCHECK
            HAVING score >= 2)
 ORDER BY 3 ASC;

[原帖] 所以我一直在尝试对这段代码做不同的方式来给我正确的结果。如果可行,我认为这是我最准确的一个:

SELECT P.prodid, P.prodname, SUM(O.qtysold) AS "TOTAL SALES"
FROM ORDERLINE O
INNER JOIN PRODUCT P
ON O.prodid = P.prodid
INNER JOIN ALLOCATION A
ON P.prodid = A.prodid
GROUP BY P.prodid, P.prodname
WHERE (SELECT AVG(score) FROM QUALITYCHECK) >= 2
ORDER BY 3 ASC;

~错误是第8行~

因此,让我解释一下我要完成的工作。我正在尝试从 Orderline 表中获取已售产品的数量,但仅在产品的质量检查平均得分大于 2 的情况下。我想尝试完成这项工作,但如果有其他方法可以做到这一点,欢迎所有建议。

我也有另一种方法,但它给我的 SUM 的结果是 3 和 15,而不是 1 和 5,我想我也会把它放在这里,以防任何人都可以解决这个问题。

 SELECT P.prodid, P.prodname, SUM(O.qtysold) AS "TOTAL SALES"
 FROM ORDERLINE O
 INNER JOIN PRODUCT P
 ON O.prodid = P.prodid
 INNER JOIN ALLOCATION A
 ON P.prodid = A.prodid
 INNER JOIN QUALITYCHECK Q
 ON A.prodid = Q.prodid
 GROUP BY P.prodid, P.prodname
 HAVING AVG(Q.score) >= 2
 ORDER BY 3 ASC;

先谢谢了

4

2 回答 2

0
 Try this 

SELECT P.prodid, P.prodname, SUM(O.qtysold) AS "TOTAL SALES"
 FROM ORDERLINE O
      INNER JOIN PRODUCT P
        ON O.prodid = P.prodid
      INNER JOIN ALLOCATION A
        ON P.prodid = A.prodid
      INNER JOIN QUALITYCHECK Q
        ON A.prodid = Q.prodid AND AVG(Q.score) >= 2 
      GROUP BY P.prodid, P.prodname
 ORDER BY 3 ASC;
于 2014-09-28T09:45:01.613 回答
0

您的第二个查询似乎值得追求。您得到的总和是错误的,因为订单行被连接了太多次。

尝试单独对产品和质量进行分组:

SELECT P.prodid, P.prodname, SUM(O.qtysold) AS "TOTAL SALES"
FROM ORDERLINE O
INNER JOIN (
    select P.prodid, P.prodname, p.prodid
    FROM PRODUCT P
    INNER JOIN QUALITYCHECK Q ON p.prodid = Q.prodid
    GROUP BY P.prodid, P.prodname, p.prodid
    HAVING AVG(Q.score) >= 2) P ON O.prodid = P.prodid
INNER JOIN ALLOCATION A ON P.prodid = A.prodid
ORDER BY 3
于 2014-09-28T10:13:48.687 回答