我正在做一个概率计算。我有一个查询来计算事件发生的总次数。从这些事件中,我想获得子事件发生的次数。获取总事件的查询有 25 行长,我不想只是复制 + 粘贴两次。
我想对这个查询做两件事:计算其中的行数,并计算这个查询的查询结果中的行数。现在,我能想到的唯一方法是(用复杂的查询替换 @total@ 以获取所有行,并将 @conditions@ 替换为来自@total@ 的行必须匹配的不太复杂的条件子事件):
SELECT (SELECT COUNT(*) FROM (@total@) AS t1 WHERE @conditions@) AS suboccurs,
COUNT(*) AS totaloccurs FROM (@total@) as t2
如您所见,@total@ 重复了两次。有没有办法解决?有没有更好的方法来做我想做的事情?
再次强调:@conditions@ 确实取决于@total@ 返回的内容(它会执行类似的操作t1.foo = bar
)。
最后一点:@total@ 本身需要大约 250 毫秒。这个更复杂的查询需要大约 300 毫秒,因此 postgres 本身可能会进行一些优化。尽管如此,查询看起来非常难看,@total@ 字面上粘贴了两次。