统计字段中包含字符串的记录数

【问题】
表的结构
id,zb1,zb2
1, abcd, adfg
2, adef’,edf
3,ae, acd
4,bde, bc

想统计出 zb1 和 zb2 字段中分别包含 a,b,c,d,e,f,g 等值的记录数

得到的结果为
zb1     zb2
a:3     a:2
b:2     b:1
c:1     c:2
d:3    d:3
e:1    e:0
f:1     f:1
g:0   g:1

附表结构
CREATE TABLE `cs` (
  `id` int(5) NOT NULL,
  `zb1` varchar(10) NOT NULL,
  `zb2` varchar(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

# 导出表中的数据 `cs`

INSERT INTO `cs` VALUES (1, ‘abcd’, ‘adfg’);
INSERT INTO `cs` VALUES (2, ‘adef’, ‘edf’);
INSERT INTO `cs` VALUES (3, ‘ae’, ‘acd’);
INSERT INTO `cs` VALUES (0, ‘bde’, ‘bc’);

【回答】
SQL 做这种拆串的事很麻烦,动态结果集就更麻烦。数据量不大可以读出来处理,用 SPL 实现如下:



A

1

$select zb1,zb2 from tb

2

=A1.conj(zb1.split(""))

3

=A1.conj(zb2.split(""))

4

=(A2|A3).id()

5

=A4.new(~/":"/A2.count(~==A4.~):zb1,~/":"/A3.count(~==A4.~):zb2)

A1: 读取数据表

1png

A2,A3: 分别将 zb1 和 zb2 字段的每条记录拆分字符再并

A4: 取出不重复成员

A5: 生成新序表,统计每个字段中包含 a,b,c,d,e,f,g 等值的记录数

2png