如果我有下面这样的桌子,

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

从这个表中,我需要通过分组来获取列pidbidflfq的行,其中的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,第二行的pidflfq,所以输出应该是
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插入-pidbidtemp_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更新-flfqfo
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/

10-13 03:45