如果我有下面这样的桌子,
tid pid bid fl fq fo
---------------------------
7114 3823 2341 3 1 1
7114 3823 2340 0 0 0
7114 3823 2350 0 0 0
7114 3850 4515 0 0 0
7114 3474 2350 0 0 0
7114 3474 2340 1 2 1
从这个表中,我需要通过分组来获取列
pid
、bid
、fl
和fq
的行,其中的fo=1
预期产量为:
pid bid fl fq fo
----------------------
3823 2341 3 1 1
3823 2340 3 1 1
3823 2350 3 1 1
3474 2350 1 2 1
3474 2340 1 2 1
注:例如(考虑表),第一行和第二行的pid相同,即
pid
,其中一行3823
(即第一行),所以我需要得到第一行的fo=1
,第二行的pid
,fl
和fq
,所以输出应该是pid bid fl fq fo
----------------------
3823 2341 3 1 1
3823 2340 3 1 1
3823 2350 3 1 1
样本数据:
create table com (tid int,pid int,bid int,fl int,fq int,fo int);
insert into com values (7114 , 3823, 2341, 3 , 1 , 1),
(7114 , 3823 , 2340 , 0 ,0 , 0),(7114 , 3823 , 2350 , 0 , 0 , 0),
(7114 ,3850, 4515, 0 , 0 , 0),(7114 , 3474 , 2350, 0 , 0, 0),
(7114 ,3474, 2340 , 1 , 2 , 1);
最佳答案
我想您正在使用PostgreSQL
数据库如果是,请尝试以下操作:
1.)创建临时表
create temp table temp_com as select pid,bid,fl,fq,fo from com limit 0;
2.)使用CTE根据您的标准和
使用CTE插入-
pid
,bid
到temp_com
with cte as (
select c1.pid,c1.bid,c1.fl,c1.fq,c1.fo
from com c1 inner join com c2 using (pid)
where c2.fo=1
)
insert into temp_com (pid,bid) (select pid,bid from cte);
从CTE更新-
fl
、fq
和fo
with cte as(
select c1.pid,c1.bid,c1.fl,c1.fq,c1.fo
from com c1 inner join com c2 using (pid)
where c2.fo=1
)
update temp_com a
set fl= cte.fl,
fq=cte.fq,
fo=cte.fo
from cte
where a.pid=cte.pid and cte.fo=1; -- gets the row have `fo=1`
结果是:
select * from temp_com;
pid bid fl fq fo
----------------------
3823 2341 3 1 1
3823 2340 3 1 1
3823 2350 3 1 1
3474 2350 1 2 1
3474 2340 1 2 1
关于mysql - 从PostgreSQL中的group by子句获取特定行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27704820/