【问题标题】:How can I pivot in PostgreSQL?如何在 PostgreSQL 中进行数据透视?
【发布时间】:2021-01-17 14:19:54
【问题描述】:

我是 PostgeSQL 的新手。我不太清楚我正在使用的版本,我在浏览器中通过 ip 访问,如果我没记错的话它被称为 pgAdmin 4。 我有一个数据库,其中有几个 id 片段和几个变量,就像这样:

piece_id | reference | variable_id | variable_value | date_of_creation
-------------------------------------------------------------------------
20001                  Force         334.6            2020-11-11 11:47:03
20001                  Vibration     6.3              2020-11-11 11:47:59
20001                  Time          11/11/2020 16:43 2020-11-11 11:48:05
20002                  Force         220.4            2020-12-11 10:37:49
20002                  Vibration     10.2             2020-12-11 10:38:01
20002                  Time          12/11/2020 18:47 2020-12-11 10:38:05

我想在旋转后获得类似的东西:

piece_id | Force  | Vibration | Time 
-------------------------------------------------
20001      334.6     6.3       11/11/2020 16:43   
20002      220.4     10.2      12/11/2020 18:47

我试图使用这段代码,但我认为我离我需要的还很远,我几乎每一行都有错误:

SELECT * FROM backend_piecedataentry
  variable_id,
  (CASE WHEN piece_id='20001' THEN variable_value END) "20001",
  
  [ORDER BY 1]  

而且我需要能够循环执行,因为我有很多piece_id,而不仅仅是我指出的那些。

非常感谢所有可以帮助我的人!

【问题讨论】:

    标签: sql postgresql pivot


    【解决方案1】:

    使用条件聚合,在 Postgres 中意味着 FILTER 子句:

    SELECT piece_id,
           MAX(variable_value) FILTER (WHERE variable_id = 'force') as force,
           MAX(variable_value) FILTER (WHERE variable_id = 'vibration') as vibration,
           MAX(variable_value) FILTER (WHERE variable_id = 'time') as time
    FROM backend_piecedataentry bp
    GROUP BY piece_id;
    

    【讨论】:

    • 天啊,非常感谢,它成功了!!!如果我的 variable_id 不仅是 Force、vibration 和 time,而且还有更多,并且每个piece_id 可能不同?我的意思是,有没有办法循环 variable_id 而不是一一写?
    • @Georgia 。 . .简单的 SQL 语句是没有办法的。为此,您需要编写动态 SQL(即将 SQL 语句构造为字符串然后执行),或者可能会使用一些 JSON 结构。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2022-08-18
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多