返回

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 。


我应该添加什么来获得所需的输出?还是有更好的方法?

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(1)
按点赞数排序
用户头像