我有一张表A和表B,以及表AB中的多对多关系。
Select A.id, AB.bId FROM A LEFT JOIN AB on A.id = AB.aId
给出
A1--B1
A1--B2
A2--B3
A3--NULL
A4--B4
我想找到有关A的总数和不具有非空B的不同A的总数。对于上表,数字和4和3.事实上,我想知道百分比3/4 = 0.75。
我可以在一个最佳查询中执行此操作吗?
答案 0 :(得分:2)
由于count()
不计算null
,您可以:
select count(distinct A.id) as DistinctA
, count(distinct case
when AB.bId is not null then A.id
end) as DistinctAHavingNotNullB
from A
left join
AB
on A.id = AB.aId
请注意,如果没有case
子句匹配,则else
没有null
会返回when
。