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.grades[1] 数学,t.grades[2] 英语,t.grades[3] 语文 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.grades[1] 数学,t.grades[2] 英语,t.grades[3] 语文 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

相关推荐
Tisfy8 天前
LeetCode 761.特殊的二进制字符串:分治(左右括号对移动)
算法·leetcode·字符串·递归·分治
Bear on Toilet9 天前
递归_二叉树_50 . 从前序与中序遍历序列构造二叉树
数据结构·算法·leetcode·深度优先·递归
Bear on Toilet11 天前
递归_二叉树_49 . 路径综合Ⅲ
数据结构·算法·前缀和·深度优先·递归
码农幻想梦12 天前
3483. 2的幂次方(上海交通大学考研机试题目)
递归·分治
代码不停17 天前
递归题目练习
java·算法·递归
少许极端18 天前
算法奇妙屋(二十九)-递归、回溯与剪枝的综合问题 2
算法·深度优先·剪枝·回溯·递归
老鼠只爱大米18 天前
LeetCode经典算法面试题 #22:括号生成(回溯法、动态规划、闭合数法等五种实现方案解析)
算法·leetcode·动态规划·递归·回溯算法·卡特兰数·括号生成
I_LPL20 天前
day21 代码随想录算法训练营 二叉树专题8
算法·二叉树·递归
少许极端20 天前
算法奇妙屋(二十八)-递归、回溯与剪枝的综合问题 1
java·算法·深度优先·剪枝·回溯·递归
2401_8414956420 天前
【LeetCode刷题】二叉树的直径
数据结构·python·算法·leetcode·二叉树··递归