1

我正在尝试计算每个月初支付给客户的佣金(假设他们的佣金超过 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 - 组功能的使用无效。

我被这个难住了,任何帮助将不胜感激。

4

2 回答 2

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;
于 2011-01-28T16:47:40.047 回答
0

在使用分组功能时,您需要告诉 MySQL 如何对数据进行分组,例如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功能

于 2011-01-28T16:40:20.830 回答