Python SQLAlchemy中的计数和分组
我在SQLAlchemy中有这些表(数据库在sqlite3中): 射击台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 . .
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。如果它慢,它(很大程度上)是因为您尚未为表编制索引。如果格式不正确,那是因为您没有充分解释所需结果的显示方式。