在SQL查询中无效使用组函数

问题描述 投票:0回答:1
SELECT tran.orderid, cust.name, (SUM(tran.quantity * item.unitprice) - orderpay.totalpay) as refund
FROM tran
LEFT OUTER JOIN item
    ON tran.itemid = item.itemid
RIGHT OUTER JOIN orderpay
    ON tran.orderid = orderpay.orderid
LEFT OUTER JOIN cust
    ON cust.custid = orderpay.custid
WHERE (SUM(tran.quantity * item.unitprice) - orderpay.totalpay) > 0
GROUP BY tran.orderid
ORDER BY orderid ASC

我很好奇为什么这不起作用,它返回的错误状态:

1111-无效使用组功能

不幸的是,我仅限于使用1 FROM子句。经过一些研究,我发现可以通过HAVING子句解决该错误,但是我无法使其正常工作。任何帮助,将不胜感激。

没有WHERE子句的输出很好,但是我试图过滤掉输出的退款列中的所有0.00。

mysql sql where-clause
1个回答
0
投票

如您所说,没有WHERE子句,此代码才能正常工作的唯一方法是,每个组只有orderpay.totalpay的值是1。如果是这种情况,则可以安全地用orderpay.totalpay替换max(orderpay.totalpay)并使用HAVING子句:

SELECT tran.orderid, cust.name, (SUM(tran.quantity * item.unitprice) - MAX(orderpay.totalpay)) as refund
FROM tran
LEFT OUTER JOIN item
    ON tran.itemid = item.itemid
RIGHT OUTER JOIN orderpay
    ON tran.orderid = orderpay.orderid
LEFT OUTER JOIN cust
    ON cust.custid = orderpay.custid
GROUP BY tran.orderid
HAVING (SUM(tran.quantity * item.unitprice) - MAX(orderpay.totalpay)) > 0
ORDER BY orderid ASC
© www.soinside.com 2019 - 2024. All rights reserved.