更新
ラジェッシュは、問題のキーと値のペアが異なる行で、実際にはない明らかにしたが、彼らは(ペア間おそらく改行文字付き(\n
))、全て同じ行にあります。この明確化を考えると、私の元の 答えは彼にとって役に立たなかった。ここで私は更新された答えを与えています。私はMySQLの外で複数のキーと値のペアの文字列を処理し、それを処理するために高水準のプログラム言語を使用する方が簡単だと思います。以下は、Javaを使用した の例です。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SplitAndSumKvPairs {
public static void main(String[] args) {
String input = ""
+ "abc: 1\n"
+ "pqr: 1\n"
+ "uvw: 0\n"
+ "opq: 5\n"
+ "srt: 6\n"
+ "xyz: 1\n"
+ "qrs: 1\n"
+ "ijk: 1\n"
+ "tuv: 1\n"
+ "ghi: 1";
Pattern p = Pattern.compile("\\s*(?<key>\\w+):\\s*(?<value>\\d+)");
Matcher m = p.matcher(input);
int sum = 0;
while (m.find()) {
int value = Integer.parseInt(m.group("value"));
sum += value;
}
System.out.format("Given this input %s%n%nthe sum is %d", input, sum);
}
}
このプログラムの出力は以下のとおりであった:
Given this input abc: 1
pqr: 1
uvw: 0
opq: 5
srt: 6
xyz: 1
qrs: 1
ijk: 1
tuv: 1
ghi: 1
the sum is 18
あるいは、一方が上記と同様のロジックを表現するために格納された関数またはストアドプロシージャを使用しようとすることができます。キーと値のペアが異なる行
select
sum(substring_index(test_column, ': ', -1))
from
test_table
のコードがSqlFiddleで試験されているされていると仮定
オールド回答(click on this link to see it)
create table test_table (
id int not null primary key auto_increment
, test_column varchar(20) not null
) engine=innoDB;
insert into test_table
values
(null, 'abc: 1')
, (null, 'pqr: 1')
, (null, 'uvw: 0')
, (null, 'opq: 5')
, (null, 'srt: 6')
, (null, 'xyz: 1')
, (null, 'qrs: 1')
, (null, 'ijk: 1')
, (null, 'tuv: 1')
, (null, 'ghi: 1');
答えが
18
ました
別々の列にすべての値を格納する方がよいまたは行... –
それを変更することは良いアイデアのようですが、少なくとも私たちは余裕がない限り、私たちのシステムに影響を与えます。また、データをハッシュ形式でテキストフィールドに保存します。ですから、私はMySQLでどのように詳細を抽出できるのかを見たいと思います。とにかくあなたの提案に感謝します... –