Gus*_*obo 5 postgresql pivot-table crosstab hstore
想象一下,我有一辆带有现场数据的桌面车:
CARS
name | data
car 1 | { "doors" => "5", "engine" => "1.1" }
car 2 | { "doors" => "3", "engine" => "1.1", "air_conditioning" => "true" }
car 3 | { "doors" => "5", "engine" => "1.4" }
Run Code Online (Sandbox Code Playgroud)
假设数据键是动态的(可以添加更多),我如何从这些数据创建一个数据透视表,如下所示:
CROSSTAB
name | doors | engine | air_conditioning
car 1 | 5 | 1.1 |
car 2 | 3 | 1.1 | "true"
car 3 | 5 | 1.4 |
Run Code Online (Sandbox Code Playgroud)
以下是获得您要求的结果的方法:
CREATE TABLE hstore_test (id bigserial primary key, title text, doors integer, engine text, air_conditioning boolean)
INSERT INTO hstore_test (title, doors, engine, air_conditioning)
VALUES ('Car1', 2, '1.1', false), ('Car2', 4, '1.2', true), ('Car3', 3, '1.3', false), ('Car4', 5, '1.4', null);
DROP TABLE IF EXISTS hstore_persist;
CREATE TABLE hstore_persist AS
SELECT hstore(t) car_data FROM hstore_test AS t;
SELECT car_data->'title' "name", car_data->'doors' doors, car_data->'engine' engine, car_data->'air_conditioning' air_conditioning
FROM hstore_persist
Run Code Online (Sandbox Code Playgroud)
这将导致表
name | doors | engine | air_conditioning
Car1 | 2 | 1.1 | f
Car2 | 4 | 1.2 | t
Car3 | 3 | 1.3 | f
Car4 | 5 | 1.4 |
Run Code Online (Sandbox Code Playgroud)
不过,它没有任何“交叉表”。这只是使用 hstore 的访问器方法以示例中所示的方式显示数据。
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |