编辑:ORA-00936:缺少[ORA-00933:SQL命令未正确结束]的表达式编辑

编辑:ORA-00936:缺少[ORA-00933:SQL命令未正确结束]的表达式编辑,sql,oracle,ora-00933,ora-00936,Sql,Oracle,Ora 00933,Ora 00936,[编辑]我被告知查询中有一个子查询,下面是我的想法和现在要做的工作。[新代码] 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 HAV

[编辑]我被告知查询中有一个子查询,下面是我的想法和现在要做的工作。[新代码]

 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;
~z~错误是第8行~

所以,让我解释一下我想要实现的目标。我试图从Orderline表中获取已售出产品的数量,但仅限于产品的质量检查分数平均值大于2的情况。我想尝试让这项工作,但如果有另一种方法,所有的建议都是欢迎的

我也有另一种方法,但它给我的结果是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;

提前感谢:您的第二个问题似乎值得继续。您得到了错误的总和,因为订单行被联接的次数太多

 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;
尝试单独对产品和质量进行分组:

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

WHERE
需要在
groupby
之前,这确实消除了错误,但没有给我任何结果。选择了0行。您的新语句给了我以下错误ORA-00934:此处不允许使用组函数嘿,伙计,我知道您试图执行的操作,但这会导致左右和中间出现一些错误。我想理解我的表格会澄清我错了一个字符-现在试试。如果不起作用,告诉我错误消息。此外,如果您需要适当的帮助,请发布您的表模式,最好是使用