具有下表
+------------------------+
| id | product_id | units|
+------------------------+
| 1 | 6949 | 3 |
| 2 | 6949 | 7 |
| 3 | 6912 | 0 |
| . | . | . |
+------------------------+
我想计算链接到产品ID的单位数,因此我使用以下查询:
SELECT id,product_id,SUM(单位)来自表GROUP BY product_id的AS单位;
哪个会返回
+------------------------+
| id | product_id | units|
+------------------------+
| 1 | 6949 | 10 |
| 2 | 6912 | 0 |
+------------------------+
我如何使用“ update”从使用product_id的任何产品中减去1个单位?谢谢
答案 0 :(得分:1)
也许我忘了提到我关心的是sum()结果,而不是如果每行的units字段正确的话。我担心简单的更新会影响到具有该product_id的所有行,因此查询将为
更新表SET单位=单位-1 WHERE product_id = 6949 LIMIT 1 ;
答案 1 :(得分:0)
您的问题仅是询问基本的GROUP BY
查询,这里是一个有效的查询:
SELECT
product_id,
SUM(units) AS units
FROM yourTable
GROUP BY
product_id;
但是您的问题有所不同,因为出现在样本结果集中的id
实际上看起来是行号,按每个产品组中的id
值之一排序。我们可以尝试编写以下查询:
SELECT
ROW_NUMBER() OVER (ORDER BY MIN(id)) id,
product_id,
SUM(units) AS units
FROM yourTable
GROUP BY
product_id;
答案 2 :(得分:0)
尝试
UPDATE table SET units = units - 1 WHERE product_id = ?
答案 3 :(得分:0)
查询的输出不反映表的内容,产品6912
的id字段不能为2
,除非它是@Tim建议的行数。我猜这是一个错字,因此要在结果表中明确使用ID,可以明确选择所需的ID;
select min(id) min_id, product_id, sum(units) agg_units, sum(units) - 1 agg_units_minus_one from product group by product_id order by min_id;
+------+------------+-----------+---------------------+
| id | product_id | agg_units | agg_units_minus_one |
+------+------------+-----------+---------------------+
| 1 | 6949 | 10 | 9 |
| 3 | 6912 | 0 | -1 |
+------+------------+-----------+---------------------+
现在,如果您真的要更新单元,我们至少要使用唯一的ID /产品组合和要分配的值,但是我怀疑这不是您想要的(以后的汇总)会是错误的。)