gpt4 book ai didi

postgresql - 取消组合 postgres 中的列

转载 作者:行者123 更新时间:2023-11-29 14:23:12 32 4
gpt4 key购买 nike

我有一张表,是用 cron 构建的。假设它有两列,Hours 和 Jobname。例如:作业 1 运行 {1,2,3,4} 小时,作业 2 运行 {3,4,5,6} 小时。

我需要一个查询,它取消列小时数的分组并列出每小时的工作。

预期输出:

Hours      Job Name1          Job 12          Job 13          Job 1, Job24          Job 1, Job25          Job 26          Job 2

最佳答案

假设您的工作列是数据类型 text(或类似) 的逗号分隔列表 - 由 ', ' 分隔 - 我转换它到一个数组 string_to_array()然后 unnest()它分隔行:

SELECT hour, unnest(string_to_array(jobs, ', ')) AS job
FROM tbl
ORDER BY 1;

你也可以使用 regexp_split_to_table(jobs, ', ') ,它更简单,但不能很好地适应更长的字符串。

相关问题:

在 Postgres 9.3 或更高版本中,使用 LATERAL 联接代替。假设查询简单并且作业被定义为NOT NULL,这有效并且通常根据元素的原始顺序返回作业:

SELECT hour, job
FROM tbl, unnest(string_to_array(jobs, ', ')) job -- implicitly LATERAL
ORDER BY 1;

SQL Fiddle.

对于更复杂的查询,或者如果 jobs 可以是 NULL:

SELECT hour, job
FROM tbl
LEFT JOIN LATERAL unnest(string_to_array(jobs, ', '))
WITH ORDINALITY AS j(job, ord) ON TRUE
ORDER BY hour, ord;

WITH ORDINALITY 要求 Postgres 9.4 只需要保证数组元素的原始顺序。详情:

关于postgresql - 取消组合 postgres 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14268594/

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