V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
vtea
V2EX  ›  问与答

请教诸位 sql 的问题,关于实现多个字符模糊匹配,最终结果按自定义的字符分类汇总

  •  
  •   vtea · 2021-04-08 18:47:23 +08:00 · 464 次点击
    这是一个创建于 1120 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教诸位 sql 的问题,关于实现多个字符模糊匹配,最终结果按自定义的字符分类汇总

    其实也是记录一下自己的思考过程,也请教大家有没更好的方法


    现有表 test,<del>字段 ct 包含 aa,ab,abc,bc,c ;字段 no 包含 1,2,3,4,5 。</del> 如下:

    no ct
    1 aa
    2 ab
    3 abc
    4 bc
    5 c

    想模糊检索的字符是包含 a 或 b,然后结果分类汇总展示 a 有几个,b 有几个

    我首先想到下面这个语句

    select ct,count(no) from test where ct like '%a%' or ct like '%b%' group by ct

    但这样结果会是

    ct count(no)
    aa 1
    ab 1
    abc 1
    bc 1

    而我想要实现结果是

    count(no)
    a 3
    b 3

    <del>于是我在想新建一个数组,包含 a,b 。结果行不通。</del>


    然后想到新建临时表 test1 字段 ct1 包含 a,b,如下

    ct1
    a
    b

    可以这样实现

    select test1.ct1,count(no) from test,test1 where test.ct like test1.ct1 group by test1.ct1


    因为这样比较麻烦,后来发现写多条算了,然后用 union all 合并

    select 'a',count(no) from test where ct like '%a%' union all select 'b',count(no) from test where ct like '%b%'


    不知大家还有什么更好的办法来实现?实现主要还是只用 sql 语言,因为公司的数据库用的 oracle,做一些临时报表用的 PL/SQl 写语句

    c6h6benzene
        1
    c6h6benzene  
       2021-04-08 19:02:57 +08:00
    其实你应该只是要看这些字符串 INSTR(ct, 'a')>0 和 INSTR(ct, 'b')>0 的数量?
    vtea
        2
    vtea  
    OP
       2021-04-09 07:29:04 +08:00 via Android
    @c6h6benzene 举的例子是这样,实际并不是,因为字符很多,所以很是麻烦
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1311 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:55 · PVG 00:55 · LAX 09:55 · JFK 12:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.