Data/PostgreSQL
PostgreSQL WITH RECURSIVE 배열로 데이터 전달하기
바리새인
2025. 1. 30. 00:23
WITH RECURSIVE category_hierarchy AS (
-- Base case: Select root nodes
SELECT
id,
name,
parent_id,
ARRAY[name] AS path, -- Start hierarchy path as an array
ARRAY[x,y,width,height] AS rectData, -- Start hierarchy path as an array
1 AS level
FROM categories
WHERE parent_id IS NULL
UNION ALL
-- Recursive case: Append child nodes to hierarchy
SELECT
c.id,
c.name,
c.parent_id,
ch.path || c.name, -- Append child name to the path
ch.rectData || ARRAY[c.x,c.y,c.width,c.height] AS rectData, -- Append child name to the path
ch.level + 1 AS level
FROM categories c
INNER JOIN category_hierarchy ch ON c.parent_id = ch.id
)
-- Flatten hierarchical path into separate columns
SELECT
id,
parent_id,
path[1] AS level1,
path[2] AS level2,
path[3] AS level3,
path[4] AS level4,
path[5] AS level5,
rectData[1:4] AS rectData1, -- Extracts first row (1:1) and first 4 columns (1:4)
rectData[5:8] AS rectData2, -- Extracts second row
rectData[9:12] AS rectData3, -- Extracts third row
rectData[13:16] AS rectData4, -- Extracts fourth row
rectData[17:20] AS rectData5 -- Extracts fifth row
FROM category_hierarchy
ORDER BY path;