我有一个分析表,如下所示。第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
要准确地实现此计数,需要查看后续行中的属性以计算计数。这样做有多好?
答案 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