count(*)
個別の行がフィルター処理される前に行数が返されるという問題があります。
これは私のクエリの簡略版です。テーブルから他の多くのデータを抽出することに注意してくださいgroup by
。おそらく 10 列でグループ化する必要があるため、同じ結果は返されません。それが機能する方法m
は、マップ マッピングq
、c
およびkl
であるため、 への参照が複数存在する可能性がありますq.id
。1つだけ欲しい。
SELECT distinct on (q.id) count(*) over() as full_count
from q, c, kl, m
where c.id = m.chapter_id
and q.id = m.question_id
and q.active = 1
and c.class_id = m.class_id
and kl.id = m.class_id
order by q.id asc
これを実行するfull_count = 11210
と、9137 行しか返されません。なしで実行するとdistinct on (q.id)
、distinct on (q.id) は実際には行数です。
そのため、count 関数はフィルタリングされた行にアクセスできないようです。どうすればこれを解決できますか? アプローチを再考する必要がありますか?