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

2021-04-08 18:47:23 +08:00
 vtea

请教诸位 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 写语句

500 次点击
所在节点    问与答
2 条回复
c6h6benzene
2021-04-08 19:02:57 +08:00
其实你应该只是要看这些字符串 INSTR(ct, 'a')>0 和 INSTR(ct, 'b')>0 的数量?
vtea
2021-04-09 07:29:04 +08:00
@c6h6benzene 举的例子是这样,实际并不是,因为字符很多,所以很是麻烦

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/769158

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX