私はpython3.3とsqlite3.7データベースでpeewee2.1を使用しています。
次のような特定の SELECT クエリを実行したいと考えています。
- 最初に集計 (カウント、合計) を選択し、id 列でグループ化します。それから
- 次に、(1) の結果から選択し、その集計を集計します。具体的には、(1)の各集計値を持つ行数をカウントしたい。
私のデータベースには、イベントごとに 1 つのレコードを持つ「イベント」テーブルと、イベントごとに 1..N チケットを持つ「チケット」テーブルがあります。各チケット レコードには、イベントの ID が外部キーとして含まれています。各チケットには、購入した座席数を指定する「座席」列も含まれています。(「チケット」は、イベントの 1 つ以上の座席の購入取引と考えるのが最適です。)
以下は、この種の SQLite クエリを実行して目的の結果を得る 2 つの例です。
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 を使用して、外側のクエリを指定するときに内側のクエリの集計 (カウントまたは合計) を選択する方法がわかりません。もちろん、その集計のエイリアスを指定できますが、そのエイリアスを外側のクエリで使用できないようです。
Peewee には「生の」SQL クエリを実行するメカニズムがあることを知っており、その回避策をうまく使用しました。しかし、Peewee を直接使用してこれらのクエリを実行できるかどうか、またはどのように実行できるかを理解したいと思います。