"5"...">

How to create a pivot table from hstore data?

Imagine I have table machines with field data inside:

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" }

Assuming the data keys are dynamic (more can be added), how can I create a pivot table from this data as follows:

CROSSTAB
name  |  doors  |  engine  |  air_conditioning
car 1 |  5      |  1.1     |
car 2 |  3      |  1.1     |  "true"
car 3 |  5      |  1.4     |
+4
source share
1 answer

Here's how to get the result you requested:

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

This will result in a table

name | doors | engine | air_conditioning
Car1 |     2 |    1.1 | f
Car2 |     4 |    1.2 | t
Car3 |     3 |    1.3 | f
Car4 |     5 |    1.4 |

There is nothing crosstab about this. It just uses the hstore accessor methods to display the data as you show in the example.

0
source

Source: https://habr.com/ru/post/1545846/


All Articles