sql频率函数就像Excel频率一样

时间:2014-06-26 23:09:36

标签: sql sql-server excel frequency

您好,您可能知道Excel中有一个频率功能,如:

=FREQUENCY(G3:G693,M683:M693) 

将列数据重组为新组并计算频率。

那么如何在存储过程中的SQL Server中完成相同的操作呢?

非常感谢您的回复......

1 个答案:

答案 0 :(得分:1)

您可以使用连接和仔细聚合来执行此操作。调用两个表ScoresBins。以下是近似值:

select b.bin, count(s.score)
from Bins b left outer join
     Scores s
     on s.score <= b.bin
group by b.bin;

它没有的一件事是&#34;最终的箱子比其他一切更大&#34;组。但是,通过很好地选择bin限制,这可能不是必需的。而且,如果您需要该功能,请将left outer join替换为full outer join

编辑:

以上是累积频率。哎呀。这是正确的频率计算:

select b.bin, b.nextbin, count(s.score)
from (select b.*, (select min(b2.bin) from Bins b2 where b2.bin > b.bin) as nextbin
      from Bins b
     ) b left outer join
     Scores s
     on s.score >= b.bin and (s.score < b.nextbin or b.nextbin is null)
group by b.bin, b.nextbin;

这与边界有类似的问题。解决这个问题的最简单方法是选择好的垃圾箱。 (您可以在SQL中修复它,但它会使查询更加复杂。)

注意在SQL Server 2012 +中,您可以使用lead()函数替换相关子查询。

Herefrequency()函数的参考,用于解释符号。