我想计算一个组中满足某些条件的项目在该组中的项目总数中的比率。我已经解决了这个问题,但很想知道我的解决方案是否是最优的,因为查询在我的大型(10m+)数据集上花费了很长的时间。
这是我最简单的形式:
create table #tableA
(
id int IDENTITY(1,1),
groupid int,
flag bit,
CONSTRAINT [PK_TableA] PRIMARY KEY CLUSTERED
(
[id] ASC
)
)
insert into #tableA (groupid,flag) values (1,0),(1,0),(1,1),(2,0),(2,1)
select
a.groupid ,
cast(totalCount as float)/count(*) as ratio
from
#tableA a
join
(
select
groupid,
COUNT(*) totalCount
from
#tableA
where
flag=1
group by
groupid
) b on a.groupid=b.groupid
group by
a.groupid,
b.totalCount
drop table #tableA
有没有更有效的方法来编写这个查询?