选择中的分区和子查询

问题描述 投票:0回答:2

我想将'ed'表中的帐户总数除以'e'表,然后得到一个零,表'ed'中有16784个帐户,'e'表中有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+')
sql subquery division
2个回答
1
投票

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

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

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

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

0
投票

如果要这些数字的比例在同一张表中,则:

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;
© www.soinside.com 2019 - 2024. All rights reserved.