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)
。
我想将 '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)
。