我有一张桌子:
RoomID Name Class Gender
1 A John CS Male
2 A Mike EE Male
3 A Mili PD Female
4 B John CS Male
5 B Mili PD Female
6 C John CS Male
我想选择所有行,这些行需要 x %或更多ID的存在(名称,类),这意味着 x =对于表中的每个ID,存在100和某个(NameA,ClassA),而不是过滤Name = NameA和Class = ClassA的行。
例如:如果 x = 100,则应删除第6,4,1行。 (John,CS)存在每个ID - A,B,C。 结果:
RoomID Name Class Gender
2 A Mike EE Male
3 A Mili PD Female
5 B Mili PD Female
如果 x = 60,则现在还需要删除行3,5。 (Mili,PD)存在ID A,B,因此存在67%的ID。 结果:
RoomID Name Class Gender
2 A Mike EE Male
*请注意我在表格之外没有任何信息,我只知道在这种情况下我检查了哪些列(名称,类别)。
非常感谢!
答案 0 :(得分:0)
您可以使用以下方式获得给定组合的总房间ID的比例:
select name, class, count(*) as cnt, count(*) / numrooms as p
from t cross join
(select count(distinct roomid) as numrooms from t) x
group by name, class;
然后您可以将其用于删除:
delete t
from t join
(select name, class, count(*) as cnt, count(*) / numrooms as p
from t cross join
(select count(distinct roomid) as numrooms from t) x
group by name, class
) tt
on tt.name = t.name and tt.class = t.class
where p >= 0.7;