xeh*_*puk 2 postgresql json aggregate-functions
我有这张表:
CREATE TABLE my_table (
id uuid PRIMARY KEY,
name text NOT NULL,
key text NOT NULL,
x int NOT NULL,
y int NOT NULL,
UNIQUE (name, key)
);
Run Code Online (Sandbox Code Playgroud)
有了这个数据:
id 名称 键 xy 12345678-abcd-1234-abcd-123456789000 富一 1 2 12345678-abcd-1234-abcd-123456789001 富 b 3 4 12345678-abcd-1234-abcd-123456789002 富c 5 6 12345678-abcd-1234-abcd-123456789003 富德 7 8 12345678-abcd-1234-abcd-123456789004 条 v 0 0 12345678-abcd-1234-abcd-123456789005 酒吧 w 1 1 12345678-abcd-1234-abcd-123456789006 巴 z 2 2 12345678-abcd-1234-abcd-123456789007 巴兹 8 7 12345678-abcd-1234-abcd-123456789008 巴兹 b 6 5 12345678-abcd-1234-abcd-123456789009 巴兹 c 4 3 12345678-abcd-1234-abcd-123456789010 巴兹 d 2 1
我有这样的疑问:
SELECT name, json_build_object(key, json_build_object('x', x, 'y', y))
FROM my_table;
Run Code Online (Sandbox Code Playgroud)
得到这个结果:
名称 json_build_object
foo {“a”:{“x”:1,“y”:2}}
foo {“b”:{“x”:3,“y”:4}}
foo {“c”:{“x”:5,“y”:6}}
foo {“d”:{“x”:7,“y”:8}}
条形图 {"v": {"x": 0, "y": 0}}
条形图{“w”:{“x”:1,“y”:1}}
条{“z”:{“x”:2,“y”:2}}
巴兹 {“a”:{“x”:8,“y”:7}}
巴兹 {“b”:{“x”:6,“y”:5}}
巴兹 {“c”:{“x”:4,“y”:3}}
巴兹 {“d”:{“x”:2,“y”:1}}
我想要什么:
foo {“a”:{“x”:1,“y”:2},“b”:{“x”:3,“y”:4},“c”:{“x”:5,“ y”:6},“d”:{“x”:7,“y”:8}}
条形图{“v”:{“x”:0,“y”:0},“w”:{“x”:1,“y”:1},“z”:{“x”:2,“ y": 2}}
baz {“a”:{“x”:8,“y”:7},“b”:{“x”:6,“y”:5},“c”:{“x”:4,“ y”:3},“d”:{“x”:2,“y”:1}}
您的查询应该是:
SELECT
name,
json_object_agg(key, json_build_object('x', x, 'y', y))
FROM data
GROUP BY name
Run Code Online (Sandbox Code Playgroud)
json_object_agg正是你想要的。
| 归档时间: |
|
| 查看次数: |
2201 次 |
| 最近记录: |