在SQLAlchemy中计数和分组

时间:2015-12-06 10:19:40

标签: python mysql sqlalchemy

我在SQLAlchemy中有这些表(数据库在sqlite3中):

镜头表

    shot_id    frame_id   ....
       1         10
       2         11
       3         10
       4         20
       5         20
       6         5
       7         20
       8         6
       .         .
       .         .
       .         .

在此表中,shot_idprimary密钥,frame_idforeign密钥。现在我想写一个查询,它给我所有shot_id具有相同frame_idframe_id s的数量大于或等于2.例如,在上表中,我想要shot_id 1,3 frame_id=10(它们都有相同的frame_id,而且有2个条目frame_id=10)和shot_id 4,5 ,frame_id=20为7。我写了这个查询:

select shot_id,count(frame_id) from shot group by frame_id having count(frame_id)>=2;

但它只给了我shot_ids 3和7.似乎group by只保留每个组的最后一个元素。我该怎么办才能得到所有镜头?

1 个答案:

答案 0 :(得分:0)

如上所述,你不需要“计算”任何东西;自我加入就足够了......

SELECT DISTINCT x.* 
           FROM my_table x 
           JOIN my_table y 
             ON y.frame_id = x.frame_id 
            AND y.shot_id <> x.shot_id;