动态按段分组汇总

本文探讨如何使用SQL和SPL(集算器)进行数据统计。通过一个具体的例子,展示了如何利用SQL统计不同部门各年龄段员工人数,同时介绍了在条件变化时,SPL如何更灵活地处理动态列结果集。这对于数据库操作和复杂数据处理具有实际指导意义。
摘要由CSDN通过智能技术生成

【问题】

I have a table emp:

EmpnoAgeDeptno
1011010
1043010
1056010
1066020
1072020

I wanted the output in the below format: Please help me.

DeptnoAge<=20Age<=40Age<=60
10111
20101

【回答】

根据部门来统计年龄在这三段中——小于等于 20 岁、21 岁到 40 岁、41 岁到 60 岁——的人数。固定条件可以使用一条 sql 语句来实现:

SELECT deptno, NVL (SUM (CASE WHEN age BETWEEN 0 AND 20 THEN 1 END),0) "Age <=20",NVL (SUM (CASE WHEN age BETWEEN 21 AND 40 THEN 1 END),0) "Age <=40",NVL (SUM (CASE WHEN age BETWEEN 41 AND 60 THEN 1 END),0) "Age <=60" FROM emp GROUP BY deptno;

变化条件,比如有时候是“Age<=20,Age<=40,Age<=60”,而有的时候是“Age<=20&Salary>3000, Age<=50”,这时候用 SQL 就不容易了,一般会用 JAVA 或者报表工具来生成 SQL 了,也很麻烦。

SPL 支持动态列结果集,允许把条件作为参数传递,很容易实现这些功能。可以帮助集算器实现上述算法。假设条件参数是 [“Age<=20”,“Age>20 && Age<=40”, “Age>40 && Age<=60”],则代码如下表:

A
1=["Age<=20","Age>20 && Age<=40", "Age>40 && Age<=60"]
2=connect("database")
3=A2.query("select * from emp")
4= A1.("count("+~+"):"+~)
5= A3.groups(Deptno;${A4.concat@c()})

A1:条件序列。

A2:连接数据源。

A3:查询 emp 表。

A4:对条件数组的每一个元素改写其格式为:count(条件): 条件。冒号前的部分是根据条件按计数的表达式,后者是结果字段名称。

A5:根据 Deptno 分组查询 A4 定义的字段。concat()函数用分隔符连接 A1 序列成员返回成字符串,@c 表示用逗号连接各个成员。${} 是宏替换,他将 concat 获得的字符串转化为 groups 函数可识别的表达式。如:count(Age<=20):Age<=20 就是根据条件 Age<=20 计数,并且结果字段名定义为 Age<=20。可用的函数还有 sum 等。

A1

imagepng

A3

imagepng

A4

imagepng

A5

imagepng

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值