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

相关推荐
码上有光4 天前
c++:二叉搜索树(map和set的底层结构)
开发语言·c++·递归·二叉搜索树
8Qi86 天前
LeetCode 235. 二叉搜索树的最近公共祖先(LCA)
算法·leetcode·二叉树·递归·二叉搜索树·lca·迭代
8Qi810 天前
LeetCode 236. 二叉树的最近公共祖先(LCA)
算法·leetcode·二叉树·递归·lca·后序遍历
8Qi810 天前
LeetCode 124. 二叉树中的最大路径和(Hard)
算法·leetcode·二叉树·递归
8Qi811 天前
LeetCode 148. 排序链表 —— 解法一:自顶向下递归(分治 + 归并)
数据结构·算法·leetcode·链表·递归·分治·归并
浅念-1 个月前
递归解题指南:LeetCode经典题全解析
数据结构·算法·leetcode·职场和发展·排序算法·深度优先·递归
qcx231 个月前
RAO 深度解读:当 Agent 学会递归调用自己——推理时扩展的新范式
人工智能·ai·llm·prompt·agent·递归
Irene19911 个月前
(课堂笔记)SQL 高级查询技巧:行列转换、重复数据、递归查询、连续登录
递归·去重·连续登录
旖-旎2 个月前
深搜(二叉树的所有路径)(6)
c++·算法·leetcode·深度优先·递归
khalil10202 个月前
代码随想录算法训练营Day-31贪心算法 | 56. 合并区间、738. 单调递增的数字、968. 监控二叉树
数据结构·c++·算法·leetcode·贪心算法·二叉树·递归