首页 > 解决方案 > 如何编写 t-sql 语句来计算特定分组中标志的出现次数?

问题描述

这是我的数据的示例:

SELECT key1, key2, flag FROM mysegtable

这将产生如下输出:

key1  key2  flag
 1     1      A
 1     2      A
 1     3      B

 2     1      A
 2     2      A

 3     1      A
 3     1      B

其中key1可以认为是header table的key,key1 + key2是segment table的key。Header -> Segment 是一对多的连接。对于每个段条目,都有一个关联的标志 A 或 B。我需要计算所有唯一值 A、B、... 的出现次数,并输出每个 key1 最常出现的那个。此外,当出现次数相同时,我必须能够强加逻辑。

所以输出应该是:

key1  flag
 1      A
 2      A
 3      B

其中 B 在关系中具有更高的优先级。

到目前为止,我的工作主要集中在从我的表中选择每个出现的标志,获得计数,然后对结果进行联合,这样我就可以对每个键和标志值对进行计数。从那里我不确定如何提取每个键的最高出现标志,并强加我的优先案例。

感谢您提供的任何帮助!

标签: sql-servertsql

解决方案


最常见的值在统计中称为“模式”。这是一种计算方法:

select t.*
from (select key1, flag, count(*) as cnt,
             row_number() over (partition by key1 order by count(*) desc) as seqnum
      from t
      group by key1, flag
     ) t
where seqnum = 1;

推荐阅读