gpt4 book ai didi

sql - PostgreSQL 交叉表/数据透视表问题

转载 作者:行者123 更新时间:2023-11-29 12:06:20 26 4
gpt4 key购买 nike

我有一个prefs 表,下面是相关的列:

mydb=> SELECT pref_id, pref_name, pref_value FROM prefs;
pref_id | pref_name | pref_value
---------+--------------+----------------
1 | PagerNumber | 2125551234
2 | PagerCarrier | @att.com
3 | PagerCarrier | @something.com

我想制作这样的东西:

 section |  pager_number  | pager_carrier
---------+----------------+---------------
1 | 2125551234 |
2 | | @att.com
3 | | @something.com

所以我使用了交叉表,按照 stackoverflow 上的这个例子:PostgreSQL Crosstab Query

SELECT row_name AS section,
category_1::text AS pager_number,
category_2::text AS pager_carrier
FROM crosstab('select pref_id::bigint, pref_name::text, pref_value::text
FROM prefs')
AS ct (row_name bigint, category_1 text, category_2 text);

所有值都进入 pager_numberpager_carrier 留空:

 section |  pager_number  | pager_carrier
---------+----------------+---------------
1 | 2125551234 |
2 | @att.com |
3 | @something.com |

谁能看到发生了什么?

最佳答案

测试用例(提供示例数据的首选方式):

CREATE TEMP TABLE prefs (pref_id int, pref_name text, pref_value text);

INSERT INTO prefs VALUES
(1, 'PagerNumber' , '2125551234')
,(2, 'PagerCarrier', '@att.com')
,(3, 'PagerCarrier', '@something.com');

查询:

SELECT *
FROM crosstab(
'SELECT pref_id, pref_name, pref_value
FROM prefs
ORDER BY 1, 2',

$$VALUES ('PagerNumber'::text), ('PagerCarrier')$$
)
AS x (section text, pager_number bigint, pager_carrier text);

准确返回问题中描述的结果。如果 PagerNumber 不是有效的 bigint 数字,请改用 text

您在问题中提到的答案已经过时,而且从一开始就不正确。我添加了一个 proper answer with explanation and links over there.

关于sql - PostgreSQL 交叉表/数据透视表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11750755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com