表结构和模拟数据例如:
table state
idcontext
..............................
1A-B-A-C
2B-D-D-A
select id,
( char_length( context ) – char_length( replace( context, 'A', '' ) ) ) as A,
(char_length( context ) – char_length( replace( context, 'B', '') ) ) as B,
(char_length( context ) – char_length( replace( context, 'C', '') ) ) as C,
(char_length( context ) – char_length( replace( context, 'D', '') ) ) as D
from state
order by ` A` desc
limit 0 , 30
句法解释:
char_length( context ),获得字符串长度
replace( context, “A”, ” )将字符串中的A替换为空
char_length( context ) – char_length( replace( context, “A”, ” ) ) 计算得到差就是被替换的字符串的个数
这里说的是,统计单个字符串,但是如果是AA-BB-CC-DD呢,我们要统计AA出现的次数还可以用char_length( context ) – char_length( replace( context, “AA”, ” ) )吗?
不能这里替换以后,得到的差是2而不是1,但是实际上’AA’字符串只出现了一次,为什么?因为AA虽然只出现了一次,但是它的长度却是2!
所以应该这么做(char_length( context ) – char_length( replace( context, “AA”, ” ) )) div 2 as A
div是mysql中进行整数除法的操作符,如果使用’/'将得到浮点数。