请教诸位 sql 的问题,关于实现多个字符模糊匹配,最终结果按自定义的字符分类汇总
資深大佬 : vtea 3
请教诸位 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 写语句
大佬有話說 (2)