我试图计算每月初支付给客户的佣金(假设他们的佣金超过25英镑)。
这是SQL:
SELECT SUM(invoiceCommision) as totalSum
FROM tbl_statement_items
WHERE fk_rid = '1'
AND dt > DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
AND totalSum > 25;
但是当我运行它时,mysql说:1054 - 'where子句'中的未知列'totalSum'。
然后我尝试了
SELECT *
FROM tbl_statement_items
WHERE fk_rid = '1'
AND dt > DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
AND SUM(invoiceCommision) > 25;
这给了我错误:1111 - 无效使用群组功能。
我对此感到难过,任何帮助都会受到赞赏。
答案 0 :(得分:1)
对于您的第一次尝试,它不起作用,因为您不能在WHERE子句的SELECT子句中使用计算字段(在计算字段之前处理WHERE)。
对于第二次尝试,它不起作用,因为您不能在WHERE子句中使用聚合函数。再次,只是坚持你的第一次尝试,但改变WHERE到HAVING。
还有一个更普遍的问题,即您的SUM()函数将只获取所有语句项的总和,而您希望每个客户端使用它。您可以使用GROUP BY获取每个客户端的总和列表,并使用HAVING子句仅返回总和大于25的那些。
尝试此操作(将client_id更改为实际的内容):
SELECT client_id, SUM(invoiceCommision) as totalSum
FROM tbl_statement_items
WHERE fk_rid = '1' AND dt > DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
GROUP BY client_id
HAVING totalSum > 25;
答案 1 :(得分:0)
在使用SUM
我希望你需要这样的东西:
SELECT *, SUM(invoiceCommision) as commisionSum
FROM tbl_statement_items
WHERE fk_rid = '1'
AND dt > DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
GROUP BY fk_rid
HAVING commisionSum > 25;
当您需要基于HAVING
,GROUP
等基于SUM
的条件时,您必须使用MAX
功能