我想计算组中符合该组中项目总数的某些条件的项目比率。我已经解决了这个问题,但很想知道我的解决方案是否是最优的,因为查询在我的大型(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
有没有更有效的方法来编写此查询?
答案 0 :(得分:4)
假设flag
为0或1,这应该有效:
select groupid ,
cast(sum(flag) as float)/count(*) as ratio
from tableA
group by groupid
如果flag
可以采用其他值,则CASE
或IF()
应该有助于SUM
工作。
答案 1 :(得分:4)
选择groupid, AVG(施放(标记为浮动))作为比率 来自tableA groupid by groupid