3

假设我有两列:

Table: MyTable

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

我正在寻找一个查询,它将返回 myString 列中每个字符的计数。在这种情况下,它将返回:

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

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

4

3 回答 3

3

这会很慢(就像 SQL 中的任何解决方案一样),但您可以使用numbers表格来拆分字母并计算它们:

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

于 2013-10-23T20:51:17.917 回答
2

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

select sum(length(mystring)) - sum(length(replace(mystring, 'a', ''))) as count_a
from mytable
于 2013-10-23T20:42:37.003 回答
0

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

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

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

于 2013-10-23T21:54:24.110 回答