计算SQL中的多对多关系

时间:2014-02-25 15:38:02

标签: mysql sql counting

我有一张表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。

我可以在一个最佳查询中执行此操作吗?

1 个答案:

答案 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