我想将'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+')
您正面临整数除法:两个操作数都是整数,因此数据库在整数上下文中进行计算(因此返回整数值)。
为避免这种情况,您可以简单地将一个值与十进制数相乘,因此这会在计算中强制使用十进制上下文。
此外,您可以通过使用条件聚合来避免对子查询的需求:这可以通过在聚合函数内移动过滤来实现,如下所示:
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
如果要这些数字的比例在同一张表中,则:
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;