1.直接聚合成json格式
sql
CREATE TABLE products (
id SERIAL PRIMARY KEY,
category TEXT,
name TEXT,
price NUMERIC
);
CREATE TABLE
Time: 7.595 ms
INSERT INTO products (category, name, price) VALUES
('Electronics', 'Laptop', 1200.00),
('Electronics', 'Smartphone', 800.00),
('Apparel', 'T-Shirt', 25.00),
('Apparel', 'Jeans', 75.00),
('Electronics', 'Headphones', 150.00);
INSERT 0 5
Time: 2.154 ms
SELECT
category,
jsonb_object_agg(name, price) AS products_detail
FROM products
GROUP BY category;
category | products_detail
-------------+-----------------------------------------------------------------
Electronics | {"Laptop": 1200.00, "Headphones": 150.00, "Smartphone": 800.00}
Apparel | {"Jeans": 75.00, "T-Shirt": 25.00}
(2 rows)
Time: 0.378 ms
2.将每行记录构造成一个 jsonb 对象,然后用 jsonb_agg 聚合为数组
sql
SELECT
category,
jsonb_agg(jsonb_build_object('name', name, 'price', price)) AS products_array
FROM products
GROUP BY category;
category | products_array
-------------+--------------------------------------------------------------------------------------------------------------------------
Electronics | [{"name": "Laptop", "price": 1200.00}, {"name": "Smartphone", "price": 800.00}, {"name": "Headphones", "price": 150.00}]
Apparel | [{"name": "T-Shirt", "price": 25.00}, {"name": "Jeans", "price": 75.00}]
(2 rows)
Time: 0.438 ms