在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.现在我正在尝试将蔬菜分组,并试图从中减去一个数量,结果不是我们所需要的。