Oracle中字符串统计问题:例如:
Id,xm, bz
1,张三,'走路,开车,跑步'
2,李四,'跑步'
3,王五,'走路,开车'
求 count('走路') 共有多少? '跑步'的数量,或者各分类各有多少 。能一句sql写出来嘛?
Id,xm, bz
1,张三,'走路,开车,跑步'
2,李四,'跑步'
3,王五,'走路,开车'
求 count('走路') 共有多少? '跑步'的数量,或者各分类各有多少 。能一句sql写出来嘛?
select count(case instr(bz,'走路') when > 0 then 1 else 0 end) --走路的count
from 表其它的依此类推,只有把‘走路’换成‘跑步’或其它的
with tab as(
select 1 id,'张三' xm,'走路,开车,跑步' bz from dual
union all
select 2,'李四','跑步' from dual
union all
select 3,'王五','走路,开车' from dual
)
select bz,Count(*) from (
select distinct id,xm,regexp_substr(bz,'[^,]+',1,level) as bz
from tab
connect by
level<=length(bz)-length(replace(bz,',',''))+1
)
group by bzBZ COUNT(*)
-----------------
开车 2
走路 2
跑步 2
--1楼写法有误。
select sum(case when instr(bz,'开车') > 0 then 1 else 0 end) count_kaiche
,sum(case when instr(bz,'走路') > 0 then 1 else 0 end) count_zoulu
,sum(case when instr(bz,'跑步') > 0 then 1 else 0 end) count_paobu
from 表
这个分类至少应该有个数据表存储的吧,不然做到各分类各有多少很麻烦。
同求高人解答。