表示百分比占总量的百分比而不是排名量

时间:2015-03-11 12:01:54

标签: sql sql-server rank

鉴于此查询:

select      [Code],         
            [EffectiveDate],
            [Volume] = Sum(Volume),
            [VolumeRank] = RANK() OVER (PARTITION BY EffectiveDate ORDER BY SUM(Volume) DESC),
            [VolumePercent] = PERCENT_RANK() OVER (PARTITION BY EffectiveDate ORDER BY SUM(Volume) ASC)
from        CodeTable
where       EffectiveDate between @start and @end
group by    DerivativeType, MemberCode, EffectiveDate

产生这些结果

X   2014-05-02 00:00:00.000 15683.00    1   1
X   2014-05-05 00:00:00.000 10524.00    1   1
Y   2014-05-05 00:00:00.000 8318.00     2   0.99236641221374
Y   2014-05-02 00:00:00.000 8264.00     2   0.991935483870968

音量百分比计算排名百分比,这是有意义的!
我想使用类似的功能来返回在日期上划分的总音量的百分比音量,而不是排名百分比。

我没有看到树木的木头......

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

然后您想使用窗口函数来计算总音量。我认为逻辑是:

select sum(volume) / sum(sum(volume)) over (partition by EffectiveDate)

如果volume是整数,则应将其转换为非整数。否则,除法将返回一个整数 - 并且为0或1.我经常通过乘以1.0来做到这一点:

select sum(volume*1.0) / sum(sum(volume)) over (partition by EffectiveDate)

第一次看到它时,构造sum(sum(volume))看起来很奇怪。内部sum()适用于group by。外部sum()用于窗口函数 - 获取聚合后的总数。