確率計算をしています。イベントが発生した合計回数を計算するクエリがあります。これらのイベントから、サブイベントの発生回数を取得したいと考えています。合計イベントを取得するためのクエリは 25 行の長さであり、コピーして 2 回貼り付けることはしたくありません。
このクエリに対して 2 つのことを行いたいと思います。行数を計算することと、このクエリのクエリ結果の行数を計算することです。今のところ、私が考えられる唯一の方法はこれです (@total@ をすべての行を取得するための複雑なクエリに置き換え、@condition@ を @total@ からの行が一致しなければならない複雑でない条件に置き換えます)。サブイベント):
SELECT (SELECT COUNT(*) FROM (@total@) AS t1 WHERE @conditions@) AS suboccurs,
COUNT(*) AS totaloccurs FROM (@total@) as t2
お気づきのとおり、@total@ が 2 回繰り返されています。これを回避する方法はありますか?私がやろうとしていることを行うためのより良い方法はありますか?
もう一度強調します: @condition@ は @total@ が返すものに依存します (それは のようなことをしますt1.foo = bar
)。
いくつかの最終的なメモ: @total@ だけで ~250ms かかります。このより複雑なクエリには約 300 ミリ秒かかるため、postgres 自体が何らかの最適化を行っている可能性があります。それでも、@total@ が文字どおり 2 回貼り付けられているため、クエリはひどく見苦しく見えます。