如何解决如何在 PostgreSQL 中进行透视?
我对 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,而不仅仅是我指出的那些。
非常感谢所有能帮助我的人!
解决方法
使用条件聚合,在 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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。