sql-如何从表中找到最常见的代码(varchar)
发布时间:2022-09-05 18:56:16 340
相关标签: # 数据库
我想在 CodeID 中找到最常见的代码,该代码位于表中的同一 code_group 中。
例如,从原始表
ID CodeID Name Code Code_group
1 1 A 101 0
2 1 A 102 0
3 1 B 102 0
4 2 C 201 0
5 2 C 201 0
6 2 D 202 0
7 2 E 202 0
8 3 F 101 1
9 3 G 103 1
10 3 G 104 1
11 3 G 104 1
我希望输出如下。
ID CodeID Name Code Code_group Selected_code
1 1 A 101 0 101
2 1 A 102 0 102
3 1 B 102 0 102
4 2 C 201 0 NULL
5 2 C 201 0 NULL
6 2 D 202 0 NULL
7 2 E 202 0 NULL
8 3 F 101 1 104
9 3 G 103 1 104
10 3 H 104 1 104
11 3 H 104 1 104
尽管第8个ID的代码在CodeID:1中相同,但它不在同一个code\u组中。
因此,对于CodeID:1,Selected\u code将是102。它必须在完全相同的Code\u组中计数。
=======================================
我试过如下方法。我不应该用ID来做这个。来自表A
with m as
(
select
CodeID,
Name,
Code,
Code_group,
cnt,
Selected_code = ROW_NUMBER() over (partition by Code_group order by cnt desc)
from( select CodeID, Name, Code,Code_group
,count(*) over (partition by Code,CodeID) as cnt from tableA
group by CodeID, Name, Code, Code_group,
) as t
group by CodeID,
Name,
Code,
Code_group, cnt
)
select a.CodeID,
a.Name,
a.Code,
a.Code_group, b.Code as Selected_code, cnt
from(select
CodeID,
Name,
Code,
Code_group,Selected_code,
cnt
from m) as a left outer join
(select CodeID,
Name,
Code,
Code_group,Selected_code,
cnt
from m where selected_Code=1) as b on a.CodeID = b.CodeID and a.Code_Group = b.Code_Group
order by a.CodeID, a.Code_Group
这个问题是 With statment使我的表与众不同。如果存在完全相同的数据(例如 ID 1,2),则仅显示一行。此外,如果频率完全相同,我不能设为NULL 。
我应该添加什么来获得所需的输出?还是有更好的方法?
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报