每组匹配行的比率

时间:2009-05-31 23:45:53

标签: sql tsql group-by

我想计算组中符合该组中项目总数的某些条件的项目比率。我已经解决了这个问题,但很想知道我的解决方案是否是最优的,因为查询在我的大型(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

有没有更有效的方法来编写此查询?

2 个答案:

答案 0 :(得分:4)

假设flag为0或1,这应该有效:

select groupid ,
       cast(sum(flag) as float)/count(*) as ratio
from tableA
group by groupid

如果flag可以采用其他值,则CASEIF()应该有助于SUM工作。

答案 1 :(得分:4)

选择groupid,        AVG(施放(标记为浮动))作为比率 来自tableA groupid by groupid