Sql peewee嵌套是否可以选择查询,以便外部查询在内部查询的聚合上进行选择?

Sql peewee嵌套是否可以选择查询,以便外部查询在内部查询的聚合上进行选择?,sql,python-3.x,sqlite,peewee,Sql,Python 3.x,Sqlite,Peewee,我将peewee2.1与python3.3和sqlite3.7数据库一起使用 我想执行某些SELECT查询,其中: 我首先选择一些聚合(count,sum),通过一些id列进行分组;然后 然后,我从(1)的结果中进行选择,在其聚合上进行聚合。具体来说,我想计算(1)中具有每个聚合值的行数 我的数据库有一个“事件”表,每个事件有一条记录,还有一个“票证”表,每个事件有1..N张票证。每个票证记录都包含事件的id作为外键。每张票还包含一个“座位”列,指定购买的座位数。(一张“票”实际上最好被认为是在

我将peewee2.1与python3.3和sqlite3.7数据库一起使用

我想执行某些SELECT查询,其中:

  • 我首先选择一些聚合(count,sum),通过一些id列进行分组;然后
  • 然后,我从(1)的结果中进行选择,在其聚合上进行聚合。具体来说,我想计算(1)中具有每个聚合值的行数
  • 我的数据库有一个“事件”表,每个事件有一条记录,还有一个“票证”表,每个事件有1..N张票证。每个票证记录都包含事件的id作为外键。每张票还包含一个“座位”列,指定购买的座位数。(一张“票”实际上最好被认为是在活动中购买一个或多个座位的交易。)

    下面是这类SQLite查询的两个示例,它们为我提供了所需的结果:

    SELECT ev_tix, count(1) AS ev_tix_n FROM 
    (SELECT count(1) AS ev_tix FROM ticket GROUP BY event_id)
    GROUP BY ev_tix
    
    SELECT seat_tot, count(1) AS seat_tot_n FROM
    (SELECT sum(seats) AS seat_tot FROM ticket GROUP BY event_id)
    GROUP BY seat_tot
    
    但是使用Peewee,我不知道在指定外部查询时如何选择内部查询的聚合(count或sum)。我当然可以为该聚合指定一个别名,但似乎无法在外部查询中使用该别名


    我知道Peewee有一种执行“原始”SQL查询的机制,我已经成功地使用了这种解决方法。但是我想了解这些查询是否/如何可以直接使用Peewee来完成。

    我在Peewee orm Google组上发布了相同的问题。Charles Leifer迅速做出回应,向peewee大师作出了回答和新的承诺。所以,虽然我在回答我自己的问题,但显然所有的功劳都归于他

    您可以在此处看到该线程:

    但这里是最重要的部分,我是从查尔斯对我的帖子的回复中抄来的:

    我已经向master添加了几个承诺,它们应该会让您产生疑问 可能的 ()

    以下是第一个示例的大致语法:

    SELECT ev_tix, count(1) AS ev_tix_n FROM 
    (SELECT count(1) AS ev_tix FROM ticket GROUP BY event_id)
    GROUP BY ev_tix
    ev_tix = SQL('ev_tix')  # the name of the alias.
    (Ticket
     .select(ev_tix, fn.count(ev_tix).alias('ev_tix_n'))
     .from_(
         Ticket.select(fn.count(Ticket.id).alias('ev_tix')).group_by(Ticket.event))
    .group_by(ev_tix))
    
    这将生成以下SQL:

    SELECT ev_tix, count(ev_tix) AS ev_tix_n FROM (SELECT Count(t2."id") 
    AS ev_tix FROM "ticket" AS t2 GROUP BY t2."event_id")
    GROUP BY ev_tix
    

    谢谢你在这里发布的解决方案,我相信这将再次出现!顺便说一句,这个好问题让我想到了一些改进API的方法。