Python SQLAlchemy中的计数和分组

Python SQLAlchemy中的计数和分组,python,mysql,sqlalchemy,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 . .

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

射击台

    shot_id    frame_id   ....
       1         10
       2         11
       3         10
       4         20
       5         20
       6         5
       7         20
       8         6
       .         .
       .         .
       .         .
在该表中,
shot\u id
键,
frame\u id
外键。现在我想写一个查询,它给出所有具有相同
frame\u id
shot\u id
s,并且
frame\u id
s的数量大于或等于2。例如,在上表中,我想要
frame\u id=10
shot\u id
1,3(它们都有相同的
frame\u id
,有2个
frame\u id=10
)和
shot\u id
4,5,7,用于
frame\u id=20
。我写了这个查询:

选择镜头id,按帧id(帧id)>=2的帧id从镜头组中选择计数(帧id)


但它只给了我3号和7号。似乎
groupby
只保留每个组的最后一个元素。我应该怎么做才能拍到所有的照片?

如上所述,你不需要“数”任何东西;自我连接就足够了

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;
选择不同的x.*
从我的表x
加入我的桌子
在y.frame\u id=x.frame\u id上
和y.shot_id x.shot_id;

如上所述,您不需要“计算”任何东西;自我连接就足够了

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;
选择不同的x.*
从我的表x
加入我的桌子
在y.frame\u id=x.frame\u id上
和y.shot_id x.shot_id;

忘记所有的计数和分组。把桌子连在一起就行了。哦,它实际上保留了每个组中的任意元素,尽管我同意在没有相互矛盾的索引的情况下,它看起来会像“最后的一个”。你能解释一下,通过将表与表本身连接起来,你会做什么吗?我需要一种方法来计算
frame\u id
的数量。如何使用join?请共享预期输出,这样您就不需要计算任何内容。您只需查找多次出现的值。连接是SQL的一个基本概念,在这里讨论的主题太广泛了。忘记所有的计数和分组吧。把桌子连在一起就行了。哦,它实际上保留了每个组中的任意元素,尽管我同意在没有相互矛盾的索引的情况下,它看起来会像“最后的一个”。你能解释一下,通过将表与表本身连接起来,你会做什么吗?我需要一种方法来计算
frame\u id
的数量。如何使用join?请共享预期输出,这样您就不需要计算任何内容。您只需查找多次出现的值。连接是SQL的一个基本概念,在这里讨论的主题太广泛了。首先,它非常慢,也没有给我所有的快照id,它只给每帧一个快照id,例如,对于frame\u id=10,它只给我快照id 1,而不是3。如果它很慢,主要是因为你没有索引你的表。如果它的格式不正确,那是因为您没有充分解释所需的结果应该如何显示。首先,它非常慢,也没有给我所有的快照id,它只给每帧一个快照id,例如,如果帧id=10,它只给我快照id 1,而不是3。如果它慢,它(很大程度上)是因为您尚未为表编制索引。如果格式不正确,那是因为您没有充分解释所需结果的显示方式。