以下表结构名称:表
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似乎无法正常工作
答案 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