MYSQL语句中WHERE中的SUM()

时间:2014-07-24 18:18:32

标签: mysql sql join sum

以下表结构名称:表

quantity      price 
  100         30.00 
  50          15.00 
  25          25.00
  25          24.00
  25          23.00

我想选择行
WHERE SUM(quantity)<=90 AND price<26.00

输出应为

quantity      price 
   50         15.00
   25         23.00
   25         24.00 

我想选择满足数量90

所需的所有行

WHERE和SUM似乎无法正常工作

4 个答案:

答案 0 :(得分:2)

您的意思是 - WHERE quantity <=90 AND price<26.00

答案 1 :(得分:1)

您不能在where子句中使用聚合函数(SUM)。 它需要有一个条款。

Where price < 26
Having Sum(Quantity) <= 90

但这只有在你有一个分组声明的情况下才有效,否则它不知道要汇总哪些行

答案 2 :(得分:1)

问题是你试图在where子句中使用聚合函数,这是不允许的。相反,您需要使用HAVING子句。

试试这个:

SELECT quantity, price
FROM table
GROUP BY quantity
HAVING SUM(quantity) <= 90 AND price < 26.00

修改

我相信你真正需要的是摆脱SUM功能,根据你的例子,你没有总结任何东西,你只是确保数量列小于90.使用这个:< / p>

SELECT quantity, price
FROM table
WHERE quantity <= 90 AND price < 26
ORDER BY quantity DESC, price ASC // Based on your example for expected output

但是,如果确实需要SUM函数来解决这个问题,那么它在where子句中不起作用的原因是因为它是一个聚合函数。有关详细信息,请参阅我链接的文章。

答案 3 :(得分:1)

SUM()是一个聚合函数,您不提供聚合,因此必然会失败。

你似乎想要的是一个总计,这很容易实现:

SELECT
  quantity, price, 
  @rt:=@rt+quantity AS runningtotal
FROM
  `table`
  INNER JOIN (SELECT @rt:=0) AS init ON 1=1
WHERE
  price<26.00
  AND @rt<=90

请参阅SQLfiddle