KADB行列转换

create table row2col(name varchar(20),subject varchar(20),grade varchar(10));

insert into row2col SELECT 'Tim' name, '数学' subject, 'A' grade

UNION

SELECT 'Tim' name, '英语' subject, 'B' grade

UNION

SELECT 'Tim' name, '语文' subject, null grade

UNION

SELECT 'Tom' name, '数学' subject, 'B' grade

UNION

SELECT 'Tom' name, '英语' subject, 'D' grade

UNION

SELECT 'Tom' name, '语文' subject, 'B' grade;

行转列:

select t.name,t.grades1 数学,t.grades2 英语,t.grades3 语文 from(

SELECT

t.name,

array_agg(t.grade order by t.subject) grades

FROM row2col t group by t.name)t;

name | 数学 | 英语 | 语文

------+------+------+------

Tim | A | B |

Tom | B | D | B

列转行:

select name,unnest(array'数学','英语','语文'),unnest(array数学,英语,语文) from (select t.name,t.grades1 数学,t.grades2 英语,t.grades3 语文 from(

SELECT

t.name,

array_agg(t.grade order by t.subject) grades

FROM row2col t group by t.name)t

)a;

name | unnest | unnest

------+--------+--------

Tim | 数学 | A

Tim | 英语 | B

Tim | 语文 |

Tom | 数学 | B

Tom | 英语 | D

Tom | 语文 | B

2、递归的实现方式

CREATE TABLE employees (

employee_id serial PRIMARY KEY,

full_name VARCHAR NOT NULL,

manager_id INT

);

INSERT INTO employees (

employee_id,

full_name,

manager_id

)

VALUES

(1, 'Michael North', NULL),

(2, 'Megan Berry', 1),

(3, 'Sarah Berry', 1),

(4, 'Zoe Black', 1),

(5, 'Tim James', 1),

(6, 'Bella Tucker', 2),

(7, 'Ryan Metcalfe', 2),

(8, 'Max Mills', 2),

(9, 'Benjamin Glover', 2),

(10, 'Carolyn Henderson', 3),

(11, 'Nicola Kelly', 3),

(12, 'Alexandra Climo', 3),

(13, 'Dominic King', 3),

(14, 'Leonard Gray', 4),

(15, 'Eric Rampling', 4),

(16, 'Piers Paige', 7),

(17, 'Ryan Henderson', 7),

(18, 'Frank Tucker', 8),

(19, 'Nathan Ferguson', 8),

(20, 'Kevin Rampling', 8);

返回id为2的经理的所有下属

WITH RECURSIVE subordinates AS (

SELECT

employee_id,

manager_id,

full_name

FROM

employees

WHERE

employee_id = 2

UNION

SELECT

e.employee_id,

e.manager_id,

e.full_name

FROM

employees e

INNER JOIN subordinates s ON s.employee_id = e.manager_id

) SELECT

*

FROM

subordinates;

employee_id | manager_id | full_name

-------------+------------+-----------------

2 | 1 | Megan Berry

9 | 2 | Benjamin Glover

8 | 2 | Max Mills

7 | 2 | Ryan Metcalfe

6 | 2 | Bella Tucker

19 | 8 | Nathan Ferguson

18 | 8 | Frank Tucker

20 | 8 | Kevin Rampling

16 | 7 | Piers Paige

17 | 7 | Ryan Henderson

相关推荐
_Narcissus_5 天前
分治&递归
数据结构·c++·笔记·算法·leetcode·递归·分治
OuO-217 天前
笔试强训 Day 44:最小差值、kotori 和素因子、dd 爱科学 1.0
二分查找·动态规划·贪心·模拟·记忆化搜索·递归·状态表示优化
漂流瓶jz1 个月前
UVA-12627 奇怪的气球膨胀 题解答案代码 算法竞赛入门经典第二版
算法·图论·递归·aoapc·算法竞赛入门经典·uva·12627
鱼子星_1 个月前
《算 · 法》题目解析篇(1):最近公共祖先问题,线段树,最长回文子序列
c++·算法·动态规划·递归
窗户2 个月前
递归的编译优化(2)
函数式编程·递归
文盲老顾3 个月前
sqlserver 根据IP和数量,计算应该使用的掩码IP地址段
sqlserver·递归·自定义函数·cte·ip掩码·表值函数
码上有光3 个月前
c++:二叉搜索树(map和set的底层结构)
开发语言·c++·递归·二叉搜索树
8Qi83 个月前
LeetCode 235. 二叉搜索树的最近公共祖先(LCA)
算法·leetcode·二叉树·递归·二叉搜索树·lca·迭代
8Qi83 个月前
LeetCode 236. 二叉树的最近公共祖先(LCA)
算法·leetcode·二叉树·递归·lca·后序遍历