select 中的分部和子查询

Divison and subquery in select

我想将 'ed' table 的帐户总数除以 'e' table,我得到的是零,Table 'ed' 有 16784 个帐户,'e' table 有 41601 个帐户,所以我想除以 16784/41601,但我在输出中得到一个零,不确定我做错了什么。

SELECT count(distinct ed.accountnumber)/(select count(distinct e.accountnumber) as totalaccts from revenueanalytics.dbo.EPICDATA e) as totalaccounts

                from revenueanalytics.dbo.EPICDATA ed

                where ed.NEW_AGING_GROUP in ('91-120','121-180','181-365','366+')

您面临整数除法:两个操作数都是整数,因此数据库在整数上下文中进行计算(因此 returns 一个整数值)。

为避免这种情况,您可以简单地将其中一个值乘以一个十进制数,这样会在计算中强制使用十进制上下文。

此外,您可以通过使用条件聚合来避免对子查询的需要:这可以通过在聚合函数内移动过滤来实现,如下所示:

select 
    1.0 
        * count(distinct 
            case when new_aging_group in ('91-120','121-180','181-365','366+') 
            then ed.accountnumber 
        end)
        / count(distinct e.accountnumber)
        as totalaccounts
from revenueanalytics.dbo.epicdata

如果你想要这些数字在同一个table中的比例,那么最简单的方法就是使用avg()和条件逻辑:

select avg(case when ed.NEW_AGING_GROUP in ('91-120', '121-180', '181-365', '366+')
                then 1.0 else 0
           end) as ratio
from revenueanalytics.dbo.EPICDATA ed;

这假定您并不真正需要 count(distinct)