gpt4 book ai didi

Postgresql 星型模式数据透视查询?

转载 作者:行者123 更新时间:2023-11-29 13:52:05 26 4
gpt4 key购买 nike

我有一个中型数据库,采用星型模式,星型有四个外部分支。对于我正在评估的一个特定的可视化软件,我需要将该数据库查询到一个 SPSS 文件中,其中一个外部分支转换为列。我是 PostgreSQL 的新手,所以我可能缺少一些简单的方法。

这是一些示例数据(只有 2 个外部分支表 - 态度和人):

mainTable
id | attitudeKey | response | personKey
1 | 4 | 3 | 2
2 | 1 | 2 | 2
3 | 4 | 1 | 1
4 | 1 | 4 | 1
5 | 5 | 3 | 1

attitudeTable
attitudeKey | attitudeName
4 | happy
1 | quiet
5 | grumpy

personTable
personKey | personName | personAge
1 | Bob | 35
2 | Amy | 30

And here is what the final result of the query needs to look like:
personKey | happy | quiet | grumpy | personName | personAge
1 | 1 | 4 | 3 | Bob | 35
2 | 3 | 2 | | Amy | 30

我确信有一种方法可以从 SQL 中获取此查询,但我的经验不足以编写连接和数据透视表。任何帮助是极大的赞赏。谢谢。

我应该提一下,列的顺序对最终结果并不重要。

现在我只是在 R 中处理数据,但这非常麻烦,我觉得使用交叉表的简单 SQL 查询会让我的生活变得更加轻松。

最佳答案

您可以使用交叉表功能来创建数据透视表。在使用这些示例之前,您需要安装扩展:

CREATE EXTENSION tablefunc

您还需要仔分割类您的数据。手册:

In practice the SQL query should always specify ORDER BY 1,2 to ensure that the input rows are properly ordered, that is, values with the same row_name are brought together and correctly ordered within the row.

您需要使用“personKey”和 attitudeName 对数据进行排序,以便将正确的值放入正确的列中。

之后您可以执行此查询。 :

select ct."personKey",ct.happy,ct.quiet,ct.grumpy,ct."personName",ct."personAge"
from crosstab($$
select t.person_key,
p.person_name,
p.person_age,
a.attitude_name,
t.response
from main_table t
join person_table p on p.person_key = t.person_key
join attitude_table a on a.attitude_key = t.attitude_key
order by 1,
case t.attitude_key
when 4 then 1
when 1 then 2
else 3
end
$$,
$$
select t.attitude_name
from attitude_table t
order by case t.attitude_key
when 4 then 1
when 1 then 2
else 3
end
$$)
as ct("personKey" INTEGER, "personName" TEXT,"personAge" INTEGER, happy INTEGER,
quiet INTEGER, grumpy INTEGER)

关于Postgresql 星型模式数据透视查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39130769/

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