为每个ID

时间:2017-08-28 17:33:09

标签: mysql sql bigdata

我有一张桌子:

  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

*请注意我在表格之外没有任何信息,我只知道在这种情况下我检查了哪些列(名称,类别)。

非常感谢!

1 个答案:

答案 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;