在MYSQL中,如何使用减法更新组

在MYSQL中,如何使用减法更新组,mysql,sql,Mysql,Sql,我们有一张蔬菜桌: CREATE TABLE `veggies` ( `id` int(8) NOT NULL AUTO_INCREMENT, `name` text NOT NULL, `qty` int(8) NOT NULL, PRIMARY KEY (`id`) ); 当我们求和(数量)并按名称分组时,结果如下: select * from veggies; +----+--------+-----+ | id | name | qty | +----+--------+-----

我们有一张蔬菜桌:

CREATE TABLE `veggies` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
`qty` int(8) NOT NULL,
PRIMARY KEY (`id`)
);
当我们求和(
数量
)并按
名称
分组时,结果如下:

select * from veggies;
+----+--------+-----+
| id | name   | qty |
+----+--------+-----+
|  1 | melon  |   5 |
|  2 | carrot |   8 |
|  3 | melon  |   7 |
|  4 | pea    |   4 |
+----+--------+-----+
现在,我们如何通过减去-2来更新表,其中'name'='humber'。并得到如下结果:

SELECT name, SUM(qty) as sum_qty FROM veggies GROUP BY name;

+--------+----------+
| name   |  sum_qty |
+--------+----------+
| carrot |        8 |
| melon  |       12 |
| pea    |        4 |
+--------+----------+

我们是否可以使用GROUP BY更新表,或者我们是否需要使用另一种方法来查询此类语句?以及实现所需结果的最简单方法是什么。

似乎您试图仅从一行中删除数量,因此,当您稍后执行
SUM()
时,结果会减少2。最好的方法是
限制1
您的结果集

+--------+----------+
| name   |  sum_qty |
+--------+----------+
| carrot |        8 |
| melon  |       10 |
| pea    |        4 |
+--------+----------+
请注意,如果没有特定的
ORDER
子句,则无法保证更新的特定行,并且每次执行此查询时可能不相同


结果

UPDATE veggies
SET qty = qty - 2
WHERE name = 'melon'
LIMIT 1;



您可能还想考虑添加一个附加条件;代码>和数量>=2,以防止获得负值。在

name
上添加一个唯一的键也是明智的,这样每个蔬菜只有一行,这样就完全避免了问题。

看起来你只是想从一行中删除数量,这样当你以后
SUM()
时,结果是少2行。最好的方法是
限制1
您的结果集

+--------+----------+
| name   |  sum_qty |
+--------+----------+
| carrot |        8 |
| melon  |       10 |
| pea    |        4 |
+--------+----------+
请注意,如果没有特定的
ORDER
子句,则无法保证更新的特定行,并且每次执行此查询时可能不相同


结果

UPDATE veggies
SET qty = qty - 2
WHERE name = 'melon'
LIMIT 1;



您可能还想考虑添加一个附加条件;代码>和数量>=2,以防止获得负值。在

name
上添加一个唯一的键也是明智的,这样每个蔬菜只有一行,从而完全避免了问题。

基于上面的@草莓评论。我相信这就是你要找的

| id  | name   | qty |
| --- | ------ | --- |
| 1   | melon  | 3   |
| 2   | carrot | 8   |
| 3   | melon  | 7   |
| 4   | pea    | 4   |


基于上面的@草莓评论。我相信这就是你要找的

| id  | name   | qty |
| --- | ------ | --- |
| 1   | melon  | 3   |
| 2   | carrot | 8   |
| 3   | melon  | 7   |
| 4   | pea    | 4   |



我很困惑。原始表有四行。是否尝试删除一行?是否希望从每个名称(如“甜瓜”)中减去1?如果有3行数据名为“甜瓜”,该怎么办?iv创建了一个名为
vegies
的表,其中包含id、名称和数量。当我从表中选择*时,它有四行,当我使用SUM()函数分组时,它有三行,我想从SUM\u qty列中扣除一个数量。最好的答案是更新您的表,使其在imo中没有重复的名称。
SELECT name,case when name='mehall',SUM\u qty-2 else sym\u qty end SUM\u qty FROM(您在这里的查询)我很困惑。原始表有四行。是否尝试删除一行?是否希望从每个名称(如“甜瓜”)中减去1?如果有3行数据名为“甜瓜”,该怎么办?iv创建了一个名为
vegies
的表,其中包含id、名称和数量。当我从表中选择*时,它有四行,当我使用SUM()函数分组时,它有三行,我想从SUM\u qty列中扣除一个数量。最好的答案是更新您的表,使其在imo中没有重复的名称。
SELECT name,case when name='mehall',SUM\u qty-2 else sym\u qty end SUM\u qty FROM(您在这里的查询)x
谢谢。对于答案,我没有使用UNIQUE的原因是,我们可能有来自多个供应商的“甜瓜”或蔬菜,并且应该记录在数据库中,为了简单起见,我包括了一个表,实际上它是一个一对多的相关表,有一个
供应商
表。而
vegies
表将包含一个
vend_id
列,这很有意义。当信息丢失时,随意选择一行进行更新是错误的(您实际销售的是哪家供应商的产品,您还剩下多少?),但这超出了问题的范围,也可能超出了您的应用程序。是的,我们只想添加蔬菜并扣除,我们销售的哪些供应商的蔬菜是不需要的,但是我们想知道卖了一种蔬菜后还有多少剩余1.现在我正试着把蔬菜分组,从中减去一个数量,结果不是我们需要的。对于答案,我没有使用UNIQUE的原因是,我们可能有来自多个供应商的“甜瓜”或蔬菜,并且应该记录在数据库中,为了简单起见,我包括了一个表,实际上它是一个一对多的相关表,有一个
供应商
表。而
vegies
表将包含一个
vend_id
列,这很有意义。当信息丢失时,随意选择一行进行更新是错误的(您实际销售的是哪家供应商的产品,您还剩下多少?),但这超出了问题的范围,也可能超出了您的应用程序。是的,我们只想添加蔬菜并扣除,我们销售的哪些供应商的蔬菜是不需要的,但是我们想知道某一种蔬菜售出后还剩下多少1.现在我正在尝试将蔬菜分组,并试图从中减去一个数量,结果不是我们所需要的。