如何在多行的字符串字段中提取最常见的字符?

Muh*_*ana 5 mysql sql

我有一个表有一些具有共同组的行:

Id    Name    Group
1     ABC1    G1
2     ABC2    G1
3     ABC3    G1
4     AXX3    G2
Run Code Online (Sandbox Code Playgroud)

在某些时候,我知道我需要查询的组(例如G1).然后我需要在Name由它们过滤的行中查询字段中最左边最常见的字符Group.所以在这种情况下,我会得到ABC.

这可以在一个查询中执行吗?我需要以最简单的方式做到这一点.

Gor*_*off 1

你可以通过暴力来做到这一点:

select groupid,
       (case when min(left(name, 10)) = max(left(name, 10)) then left(name, 10)
             when min(left(name, 9)) = max(left(name, 9)) then left(name, 9)
             when min(left(name, 8)) = max(left(name, 8)) then left(name, 8)
             when min(left(name, 7)) = max(left(name, 7)) then left(name, 7)
             when min(left(name, 6)) = max(left(name, 6)) then left(name, 6)
             when min(left(name, 5)) = max(left(name, 5)) then left(name, 5)
             when min(left(name, 4)) = max(left(name, 4)) then left(name, 4)
             when min(left(name, 3)) = max(left(name, 3)) then left(name, 3)
             when min(left(name, 2)) = max(left(name, 2)) then left(name, 2)
             when min(left(name, 1)) = max(left(name, 1)) then left(name, 1)
        end) as CommonPrefix
from t
group by groupid;
Run Code Online (Sandbox Code Playgroud)

如果你不太喜欢打字,你也可以这样做:

select groupid,
       max(case when min(left(name, n.n)) = max(left(name, n.n)) then left(name, n.n) end)
from t cross join
     (select 1 as n union all selet 2 union all select 3 . . .
     ) n
group by groupid;
Run Code Online (Sandbox Code Playgroud)

(或者使用where子句获取一组的信息。)对于此示例,只需不断向n子查询添加整数,直到达到您想要测试的长度。