关于db2中listagg函数开发中的体验

一.首先解释一下可能会查询的基础问题:

1.1db2 “with ur”是什么意思:

在DB2中,共有四种隔离级:RS,RR,CS,UR.以下对四种隔离级进行一些描述,同时附上个人做试验的结果。隔离级是影响加锁策略的重要环节,它直接影响加锁的范围及锁的持续时间。两个应用程序即使执行的相同的操作,也可能由于选择的隔离级的不同而造成加锁的结果不同。

1.2查看连接db2数据库的版本:

命令查看: 用db2level 查看

1.3在db2中会有''字符串和null的区分

1.4声明一下这个开发时基于https://www.csdn.net/gather_2d/MtTaAg5sODY1My1ibG9n.html这个网页里的数据的

WITH
emp(deptno,job,telephone) AS(
SELECT * FROM (
VALUES (10,'persident','apple'),(30,'manager','orange'),(10,'persident','orange'),(20,'anayst','apple'),(30,'clerk','apple'),(20,'manager','orange')
,(20,'clerk','apple'),(10,'manager',null),(30,'sakesman','apple'),(10,'manager',''))
)
,fld(deptno,job,telephone) AS (
SELECT
deptno,
decode(row_number() over(PARTITION BY deptno,job),1,job) job,
decode(row_number() over(PARTITION BY deptno,telephone),1,telephone) telephone
FROM emp
)
SELECT
deptno,
listagg(job,',') within GROUP (ORDER BY job DESC ) jobs,
listagg(telephone,',') within GROUP (ORDER BY telephone) telephones
FROM fld
GROUP BY dep

整个过程我们可以看到''字符串是作为一个字符来传递的,而null值则是被过滤掉了。由于db2服务器版本过低,所以不能使用distinct进行拼接的过滤,只能使用11版本以前的函数进行开发测试,后续继续补充

 

posted on 2019-08-16 14:16  高富帅的一等保镖  阅读(3809)  评论(0编辑  收藏  举报

导航