计算列中所有不同字符的出现次数

时间:2013-10-23 20:34:18

标签: mysql

假设我有两列:

Table: MyTable

myString 
----------
 abaa
 abb
 a
 bc     

我正在寻找一个可以返回myString列中每个char的计数的查询。在这种情况下,它会返回:

letter     count
-----------------
a            5
b            3
c            1

我发现计算字符的唯一方法是通过一个复杂的删除方法(计算没有char的长度,删除char,然后重新计算),所以我想知道是否有办法完成这个更复杂的任务。

3 个答案:

答案 0 :(得分:3)

这将很慢(可能是SQL中的任何解决方案),但您可以使用numbers table拆分字母并计算它们:

SELECT
  SUBSTRING(myString, number, 1) AS Letter,
  COUNT(*) AS LetterCount
FROM
  numbers n
  JOIN myTable mt
    ON n.number <= CHAR_LENGTH(mt.myString)
GROUP BY SUBSTRING(myString, number, 1)

Working SQL Fiddle

答案 1 :(得分:2)

你非常接近目标。您可以使用以下查询来实现此目的:

select sum(length(mystring)) - sum(length(replace(mystring, 'a', ''))) as count_a
from mytable

答案 2 :(得分:0)

另一种解决方案是使用存储过程
请参阅 SQL Fiddle

我真的认为这不是最好的解决方案,我不建议在生产中使用包含有意义的数据长度的表。

但是,用于研究或实验目的。
拥抱。