使用后续行中找到的属性聚合行类型

时间:2015-02-12 21:19:37

标签: count row forward

我有一个分析表,如下所示。第1行与第2行和第3行相关联。第4行没有关联的行。第6行与第6,7,8行相关联。我想使用Name作为ID并通过计算Attr1条目来汇总此表。

> d     
        Name    Attr1   Attr2  
1       C2H2            Organic
2               5       A       
3               9       B       
4       C4H4                
5       C4H6
6               22      B
7               36      
8               94      B

其中一些分析具有完整或(C2H2,C4H6)部分属性集(Attr1,Attr2)和一些分析(C4H4)没有任何属性已知。我想通过计算Attr1来计算命名化合物的数量子类别。我想最终得到一个计数la:

1     C2H2  2   
2     C4H4  1  
3     C4H6  3  

要准确地实现此计数,需要查看后续行中的属性以计算计数。这样做有多好?

1 个答案:

答案 0 :(得分:0)

根据表格结构的假设进行疯狂猜测的尝试如下。请让我知道任何差异,以便我可以相应地纠正。

以下代码假设Postgres。这应该适用于大多数数据库的最小变化。

假设数据:

create table chem (
    name text, 
    attr1 text, 
    attr2 text
);

insert into chem (name, attr1, attr2) 
values 
    ('C2H2', null, 'organic'), 
    ('C2H2', 5, 'A'), 
    ('C2H2', 9, 'B'), 
    ('C4H4', null, null), 
    ('C4H6', 22, 'B'), 
    ('C4H6', 36, null), 
    ('C4H6', 94, 'B');

查询:

select name, count (1)
from chem
where attr1 is not null
group by name

union

select name, 1
from chem fa
where not exists (
    select 1
    from chem fb
    where fa.name = fb.name
        and attr1 is not null
    limit 1)

产生结果:

"C4H4";1
"C4H6";3
"C2H2";2