统计字段中包含字符串的记录数
【问题】
表的结构
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: 读取数据表
A2,A3: 分别将 zb1 和 zb2 字段的每条记录拆分字符再并
A4: 取出不重复成员
A5: 生成新序表,统计每个字段中包含 a,b,c,d,e,f,g 等值的记录数