我在列中有这种类型的数据:
!-------!---!-------
!-------!-----!-----
!-------!!----------
!-------!-----!-----
!-------!-----!-----
我需要计算'!'的出现次数 - 在字符串的每个位置。
对于位置1 - 我应该得到5, 位置2 - 0 位置3 - 0 位置4 - 0 位置5 - 0 位置6 - 0 位置7 - 0 位置8 - 0 位置9 - 5 等等。有20个职位。我想忽略' - '。
我试过使用locate:
select
`color` AS `color`,
locate('!',
`Info`) AS `Position`,
count(`Info`) AS `Count`
from
`CountReport`
where
(locate('!',
`Info`) = 1)
group by `color`
但如果'!'每次不计算角色的其他实例时,它会显示在第一个位置。我有一个每个职位的脚本。
对此的任何帮助将不胜感激。非常感谢提前!
- H
答案 0 :(得分:1)
我不确定这是否是最有效的方法:
select count(case substring(s,1,1) when '!' then 1 else NULL end) as pos1,
...
count(case substring(s,10,1) when '!' then 1 else NULL end) as pos10,
...
count(case substring(s,20,1) when '!' then 1 else NULL end) as pos20
from test;