如何根据另一列的值总和选择一行?

时间:2014-10-27 02:19:34

标签: mysql sum

我有一个名为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)必须

  • 1
  • 3

这是我到目前为止所尝试的内容:

SELECT product_id 
FROM stock 
WHERE 10>(SELECT SUM(quantity) FROM stock)

请帮我弄清楚为什么这不起作用。

2 个答案:

答案 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