小编典典

SQL-将查询结果用作一条语句中其他两个查询的基础

sql

我正在做一个概率计算。我有一个查询来计算事件发生的总数。从这些事件中,我想获得子事件发生的次数。查询以获取事件总数为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
@本身需要〜250ms。这个更复杂的查询需要300毫秒左右的时间,因此postgres可能会自己进行一些优化。仍然,查询看起来非常丑陋,@ total
@确实被粘贴了两次。


阅读 42

收藏
2021-04-28

共1个答案

小编典典

SELECT COUNT(*) as totaloccurs, COUNT(@conditions@) as suboccurs
FROM (@total@ as t1)
2021-04-28