sql-server - 如何编写 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 在关系中具有更高的优先级。
到目前为止,我的工作主要集中在从我的表中选择每个出现的标志,获得计数,然后对结果进行联合,这样我就可以对每个键和标志值对进行计数。从那里我不确定如何提取每个键的最高出现标志,并强加我的优先案例。
感谢您提供的任何帮助!
解决方案
最常见的值在统计中称为“模式”。这是一种计算方法:
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;
推荐阅读
- laravel - Laravel 背包多态 CRUD 字段
- html - 如何标记表格的水平轴和垂直轴?
- python - Django HTML 表单发送附件电子邮件
- intellij-idea - 缺少项目级别设置
- ruby-on-rails - 如何添加外部链接 - Ruby on Rails
- ios - 如何从苹果商店下载已发布的应用程序
- javascript - 为什么 Object.getOwnPropertyNames() 不起作用
- asp.net - ASP.Net 引导程序和 App_Themes
- java - 获取 JavaFX WebView 控制台事件的公共 API 是什么?
- r - R中的并行cpp函数?