我有一个名为stock
的表,其设计如下:
| ID | product_id | qty |
|----|------------|-----|
| 1| 1 | 4 |
| 2| 1 | 3 |
| 3| 2 | 10 |
| 4| 2 | 15 |
| 5| 3 | 2 |
从这张表中我想选择总数量小于10的product_id
。
根据此表选择(product_id)必须
这是我到目前为止所尝试的内容:
SELECT product_id
FROM stock
WHERE 10>(SELECT SUM(quantity) FROM stock)
请帮我弄清楚为什么这不起作用。
答案 0 :(得分:2)
这不会起作用,因为如果你使用聚合函数,你必须把它放在HAVING子句中。您还希望按product_id进行分组,以便SUM()函数知道要求和的组。
试试这个:
SELECT product_id
FROM stock
GROUP BY product_id
HAVING SUM(quantity) < 10;
以下是您的SQL Fiddle示例。
答案 1 :(得分:-1)
SELECT product_id, SUM(qty) tot_stock
FROM stock
GROUP BY 1
HAVING tot_stock < 10
这也为您提供了总存量,如果您不需要,可以将其丢弃。
但是,如果您只想将 产品ID发送到客户端,请将上述查询包装到另一个选择中,如下所示:
SELECT product_id FROM (SELECT product_id, SUM(qty) tot_stock
FROM stock
GROUP BY 1
HAVING tot_stock < 10) a