【问题标题】:How to create a pivot table from hstore data?如何从 hstore 数据创建数据透视表?
【发布时间】:2014-08-14 20:11:49
【问题描述】:

假设我有一个表汽车,里面有一个字段数据:

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

假设数据键是动态的(可以添加更多),我如何从该数据创建数据透视表,如下所示:

CROSSTAB
name  |  doors  |  engine  |  air_conditioning
car 1 |  5      |  1.1     |
car 2 |  3      |  1.1     |  "true"
car 3 |  5      |  1.4     |

【问题讨论】:

    标签: postgresql pivot-table crosstab hstore


    【解决方案1】:

    以下是获得您要求的结果的方法:

    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
    

    这将导致表格

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

    不过,它没有任何“交叉表”。这只是使用 hstore 的访问器方法以您在示例中显示的方式显示数据。

    【讨论】:

      猜你喜欢
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多