Я бы хотел рассчитать соотношение элементов в группе, которые соответствуют определенным критериям, к общему количеству элементов в этой группе. Я уже решил эту проблему, но мне любопытно узнать, является ли мое решение оптимальным, так как запрос занимает проблематично много времени в моем большом (10 м +) наборе данных.
Вот что я имею в своей простейшей форме:
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
Есть ли более эффективный способ написать этот запрос?