sql统计的特定字符串出现次数
我有一个表格如下idD1D2D31WSQWSSQ2WQSQ3SQWSQ现在我想分别统计D1中W,S,Q出现的次数,D2中W,S,Q出现的次数,,D3中W,S,Q出现的次数...
我有一个表格如下
id D1 D2 D3
1 WSQ WS SQ
2 WQ S Q
3 S Q WSQ
现在我想分别统计D1中W,S,Q出现的次数,D2中W,S,Q出现的次数,,D3中W,S,Q出现的次数
代码稍微写详细点 谢谢 展开
id D1 D2 D3
1 WSQ WS SQ
2 WQ S Q
3 S Q WSQ
现在我想分别统计D1中W,S,Q出现的次数,D2中W,S,Q出现的次数,,D3中W,S,Q出现的次数
代码稍微写详细点 谢谢 展开
展开全部
假设表名是t
select t.d1,count(*) from t where d1 like '%W%' group by t.d1 得出D1列W的出现次数
select t.d1,count(*) from t where d1 like '%S%' group by t.d1 得出D1列S的出现次数
select t.d1,count(*) from t where d1 like '%Q%' group by t.d1 得出D1列Q的出现次数
剩下D2,D3使用同法
select t.d1,count(*) from t where d1 like '%W%' group by t.d1 得出D1列W的出现次数
select t.d1,count(*) from t where d1 like '%S%' group by t.d1 得出D1列S的出现次数
select t.d1,count(*) from t where d1 like '%Q%' group by t.d1 得出D1列Q的出现次数
剩下D2,D3使用同法
展开全部
楼上两位写的没有考虑到WWSQ这种有两个W的。
我又写了一个,oracle10gr2已验证
数据如下
1 WWSQ WS SQ
2 WQ S Q
3 S Q WSQ
----------------------------------------------------------
select t2.vf,
sum((length(t1.D1) - length(replace(t1.D1, t2.vf))) / length(t2.vf)) D1,
sum((length(t1.D2) - length(replace(t1.D2, t2.vf))) / length(t2.vf)) D2,
sum((length(t1.D3) - length(replace(t1.D3, t2.vf))) / length(t2.vf)) D3
from tmp1 t1,
(select 'W' vf
from dual
union all
select 'S' vf
from dual
union all
select 'Q' vf from dual) t2
group by t2.vf
----------------------------------
结果为
W 3 1 1
Q 2 0 2
S 1 1 2
我又写了一个,oracle10gr2已验证
数据如下
1 WWSQ WS SQ
2 WQ S Q
3 S Q WSQ
----------------------------------------------------------
select t2.vf,
sum((length(t1.D1) - length(replace(t1.D1, t2.vf))) / length(t2.vf)) D1,
sum((length(t1.D2) - length(replace(t1.D2, t2.vf))) / length(t2.vf)) D2,
sum((length(t1.D3) - length(replace(t1.D3, t2.vf))) / length(t2.vf)) D3
from tmp1 t1,
(select 'W' vf
from dual
union all
select 'S' vf
from dual
union all
select 'Q' vf from dual) t2
group by t2.vf
----------------------------------
结果为
W 3 1 1
Q 2 0 2
S 1 1 2
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select t2.vf,
D1=count(case when t1.D1 like '%'+t2.vf+'%' then 1 else null end),
D2=count(case when t1.D2 like '%'+t2.vf+'%' then 1 else null end),
D3=count(case when t1.D3 like '%'+t2.vf+'%' then 1 else null end) from table1 t1,(select vf='W' union select 'S' union select 'Q') t2
group by t2.vf
这样清楚点。
vf D1 D2 D3
----------------------------------------
Q 2 1 3
S 2 2 2
W 2 1 1
D1=count(case when t1.D1 like '%'+t2.vf+'%' then 1 else null end),
D2=count(case when t1.D2 like '%'+t2.vf+'%' then 1 else null end),
D3=count(case when t1.D3 like '%'+t2.vf+'%' then 1 else null end) from table1 t1,(select vf='W' union select 'S' union select 'Q') t2
group by t2.vf
这样清楚点。
vf D1 D2 D3
----------------------------------------
Q 2 1 3
S 2 2 2
W 2 1 1
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建个临时表(字符名、字符个数两个字段),然后切割字符串,循环字符串中的字符和个数插入临时表。
关于字符个数计算:
在循环中用select
len('字符串')-len(replace('字符串','字符',''))
关于字符个数计算:
在循环中用select
len('字符串')-len(replace('字符串','字符',''))
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询