使用PostgreSQL对具有主题/任务的表进行展平或旋转

时间:2017-10-03 19:57:00

标签: sql database postgresql

我在PostgreSQL数据库中有一个大型数据表来自一项研究,其中一些测试对象执行了许多任务,并且有几个传感器在执行这些任务时收集了数据。我需要为每个主题创建一个只有一行的表,以及与每个任务的传感器测量值对应的列。我想要实现的一个简化示例: Sample data and sample output

一些关键问题:

  • 我已经汇总了我需要的数据,因此每个主题/任务组合只有一行。
  • 并非所有科目都能保证完成所有任务。如果主题尚未完成任务,则没有相应的主题/任务行。
  • 输出需要有一个与传感器和任务的每种可能组合相对应的列。
  • 我正在使用的实际表格包含 37列传感器数据 24个任务,每个任务在
    中执行两次和会后。因此,我需要的列数是37x24x2=1776列数据!

我可以为每个任务创建一个新视图,然后在主题列上执行外部联接,但这仍然需要为所有24个任务手动创建单独的视图并为所有1776列指定名称。

如何构建自动创建必要列的查询?

3 个答案:

答案 0 :(得分:1)

我认为你有一些特别的问题:

  1. 查询需要在一开始就知道列以供规划之用。
  2. 你想做一个相当大的支点。
  3. 我怀疑tablefunc的交叉表函数会有很多帮助(或者可能被黑客攻击,如果有必要,可以执行您想要的操作,因为它被编写为C语言表值函数的示例)。但是,您仍然需要在查询外生成交叉表条件并运行它。

    这导致了两个选项:

    1. 在数据库外部创建查询,并使用大量交叉表或
    2. 将其反馈
    3. 在pl / pgsql存储过程中创建数据库内的交叉表并返回refcursor。
    4. 我怀疑在大多数情况下,第一种情况更好。

答案 1 :(得分:1)

您可以增加postgresql列数。以下链接的信息:

https://manual.limesurvey.org/Instructions_for_increasing_the_maximum_number_of_columns_in_PostgreSQL_on_Linux

另外,json类型列可能是大型列集的一个很好的替代方案。

答案 2 :(得分:0)

Postgresql有很好的文档,请查看网站上的postgresql帮助或下载pdf文档。

https://www.postgresql.org/docs/current/static/datatype-json.html