【问题标题】:sql frequency function just like Excel Frequencysql频率函数就像Excel频率一样
【发布时间】:2015-03-10 17:38:41
【问题描述】:

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

=FREQUENCY(G3:G693,M683:M693) 

这会将列数据重新分组到新组中并计算频率。

那么我怎样才能在存储过程中的 SQL Server 中做完全相同的事情???

非常感谢您的回复...

【问题讨论】:

  • 听起来像 select field1, field2, count(*) records group by field1, field2

标签: sql sql-server excel frequency


【解决方案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;

它没有的一件事是“大于一切”组的最终垃圾箱。但是,通过很好地选择 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() 函数的引用,用于解释符号。

【讨论】:

  • 嗨@Gordon Linoff 感谢您的回复。它工作完美。但是我还需要添加一个“Where”子句,然后当count列为0时,它不会显示,所以我该如何解决这个问题
  • @user3479682 。 . .我认为这是另一个问题。据我所知,Excel 函数对where 子句一无所知。
  • 其实我的意思是在 SQL Server 中使用存储过程。因为它是带有动态where 子句的动态SQL。上面的代码运行良好,直到我放置一个 Where `ID = ID',然后当计数列为 0(我也想显示)但它只是不显示
猜你喜欢
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 2022-10-06
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 1970-01-01
  • 2010-11-28
相关资源
最近更新 更多