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

相关推荐
Irene19911 天前
(课堂笔记)SQL 高级查询技巧:行列转换、重复数据、递归查询、连续登录
递归·去重·连续登录
旖-旎5 天前
深搜(二叉树的所有路径)(6)
c++·算法·leetcode·深度优先·递归
khalil10207 天前
代码随想录算法训练营Day-31贪心算法 | 56. 合并区间、738. 单调递增的数字、968. 监控二叉树
数据结构·c++·算法·leetcode·贪心算法·二叉树·递归
旖-旎8 天前
深搜(二叉树剪枝)(3)
数据结构·c++·算法·力扣·剪枝·递归
旖-旎10 天前
递归(快速幂)(5)
c++·算法·力扣·递归
旖-旎12 天前
递归(汉诺塔问题)(1)
c++·学习·算法·leetcode·深度优先·递归
♛识尔如昼♛17 天前
C 基础(8) - 函数
c语言·指针·递归·函数
进击的荆棘19 天前
递归、搜索与回溯——递归
算法·leetcode·递归
王老师青少年编程23 天前
csp信奥赛c++中的递归和递推研究
c++·算法·递归·递推·csp·信奥赛
老鼠只爱大米1 个月前
LeetCode经典算法面试题 #70:爬楼梯(朴素递归、记忆化递归、动态规划等六种实现方案详解)
算法·leetcode·动态规划·递归·斐波那契·矩阵快速幂·爬楼梯