【问题】
表的结构
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 等值的记录数

本文介绍了一种使用SPL语言处理SQL难以直接解决的问题——统计表中zb1和zb2字段内特定字符(a,b,c,d,e,f,g)的出现次数。通过读取数据表,将字段值拆分为字符,并统计每个字符的出现频率。
686

被折叠的 条评论
为什么被折叠?



