Peewee:在select查询中使用count(*)

时间:2016-11-21 16:37:11

标签: sql peewee

假设我们有一个看起来像这样的假设表:

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。假设我想搜索颜色为redorange的组ID。原始SQL查询类似于:

  SELECT group_id 
    FROM colors
   WHERE color
      IN ('red', 'orange')
GROUP BY group_id
  HAVING COUNT(*) = 2;

这将返回组ID 100104。什么是Peewee SelectQuery?我无法找到如何代表COUNT(*)位。

1 个答案:

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