3

2 つの列があるとします。

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 に答える