gpt4 book ai didi

sql - mysql - 基于其他行更新行

转载 作者:行者123 更新时间:2023-11-29 09:13:14 25 4
gpt4 key购买 nike

我希望根据其他行的特定条件更新某些行。假设表格如下所示:

COLUMNS:   time              type     genre    doubles     triples
ROW 1: 2010.06.21 12:00 1 1 0 0
ROW 2: 2010.06.21 12:00 1 2 0 0
ROW 3: 2010.06.21 12:00 1 1 0 0
ROW 4: 2010.06.21 12:00 2 3 0 0
ROW 5: 2010.06.22 12:00 2 2 0 0
ROW 6: 2010.06.22 12:00 2 3 0 0
ROW 7: 2010.06.22 12:00 1 1 0 0

我希望根据以下规则更新 double 三精度 列:

1) 仅查看更新行之间 time=timetype=type 的行(例如第 1、2、3 行和第 5 行和第 6 行)。

2) 接下来计算这些行之间不同流派的数量,如果有两个不同的流派,则更改 double 列为 1,或者如果有 3 个,则将 triples 列更改为 1。例如,在上表中,第 1,2,3 行将具有 doubles=1,因为在三排有两种不同的流派。第 5 行和第 6 行也会有 doubles=1,因为行之间又存在两种不同的流派。 双数 可以 =1,三元 可以 =1,但不能同时存在。

现在,我认为我可以很容易地根据这些规则编写一些 PHP,但我想知道是否有办法在 mysql 中完成这一切?我似乎总是对 SQL 语句可以完成的工作量感到惊讶。

也许类似(双数三元列的两个不同的语句):

double - UPDATE myTable SET (doubles=1) WHERE time=time AND type=type ...但是你如何解释上面的规则#2(计算具有独特流派的行数) )。

这在 mysql 中可能吗?或者 PHP 是这里的正确方法吗?

提前致谢

最佳答案

当然,您可以在一个查询中完成此操作。使用此示例表:

create table duotri (time varchar(100), type int, genre int, doubles int, triples int);
insert duotri values
('2010.06.21 12:00' ,1 ,1 ,0 ,0),
('2010.06.21 12:00' ,1 ,2 ,0 ,0),
('2010.06.21 12:00' ,1 ,1 ,0 ,0),
('2010.06.21 12:00' ,2 ,3 ,0 ,0),
('2010.06.22 12:00' ,2 ,2 ,0 ,0),
('2010.06.22 12:00' ,2 ,3 ,0 ,0),
('2010.06.22 12:00' ,1 ,1 ,0 ,0);

更新语句应该连接到 GROUPed 形式以获得 double 和三精度。

update duotri t1
inner join (
select time, type,
case when count(distinct genre) = 2 then 1 else 0 end doubles,
case when count(distinct genre) = 3 then 1 else 0 end triples
from duotri
group by time, type) t2
on t1.time=t2.time and t1.type=t2.type
set t1.doubles=t2.doubles, t1.triples = t2.triples;

关于sql - mysql - 基于其他行更新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4908245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com