sqlite 如何选择有条件和无条件的结果?

baubqpgj  于 2023-04-21  发布在  SQLite
关注(0)|答案(2)|浏览(181)

我有几个查询,其中一个查询需要有条件,另一个查询不需要条件(通常是计算<results with condition>/<all results>的比率):

-- all results
select count(*)
from somewhere

-- filtered results
select count(*)
from somewhere
where condition

实际的查询要长得多,有几个连接,我希望有一个能包含两种情况的查询。这可能吗?

vybvopom

vybvopom1#

您正在描述条件聚合。您的伪代码如下所示:

select count(*) as total,
    sum(case when <condition> then 1   else 0 end) as total_with_cond,
    avg(case when <condition> then 1.0 else 0 end) as ratio_with_cond
from somewhere

其中<condition>表示要在每行上检查的 predicate 。
在SQLite中,可以在数值上下文中计算 predicate ,我们可以进一步缩短语法如下:

select count(*) as total,
    sum(<condition>) as total_with_cond,
    avg(<condition>) as ratio_with_cond
from somewhere
isr3a4wc

isr3a4wc2#

上面给出的两个伪查询的简化可能是:

SELECT COUNT(CASE WHEN <condition> THEN 1 END) / COUNT(*) AS ratio
FROM somewhere;

这里我们使用条件聚合来查找带有条件的计数。请注意,上面的查询只需要在表上进行一次传递,因此是高效的。

相关问题