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