假设我们有一个看起来像这样的假设表:
id color group_id
---------- ------------- ----------
1 red 100
2 blue 101
3 orange 100
4 red 102
5 pink 103
6 red 104
7 orange 104
8 orange 105
我想选择包含特定颜色集的所有颜色的组ID。假设我想搜索颜色为red
和orange
的组ID。原始SQL查询类似于:
SELECT group_id
FROM colors
WHERE color
IN ('red', 'orange')
GROUP BY group_id
HAVING COUNT(*) = 2;
这将返回组ID 100
和104
。什么是Peewee SelectQuery?我无法找到如何代表COUNT(*)
位。
答案 0 :(得分:2)
当然可以:
(Colors
.select(Colors.group)
.where(Colors.color << ('red', 'orange'))
.group_by(Colors.group)
.having(fn.COUNT(Colors.id) == 2))
或者,您可以这样做:
.having(fn.COUNT(SQL('*')) == 2)
这里有一些重叠与每组&#34;前N个对象&#34;情况类型。这里记录了许多解决方案:
http://docs.peewee-orm.com/en/latest/peewee/hacks.html#top-n-objects-per-group
最后,这也类似于查找标记有特定标记集的对象。我的博客上有示例查询,在这里:
http://charlesleifer.com/blog/a-tour-of-tagging-schemas-many-to-many-bitmaps-and-more/