PostgreSQL:如何将多行的值放在不同的列中,并将所有值合并到一行中?
Posted
技术标签:
【中文标题】PostgreSQL:如何将多行的值放在不同的列中,并将所有值合并到一行中?【英文标题】:PostgreSQL : How do I take multiple rows with values in different columns and combine into one row with all the values on one line? 【发布时间】:2018-11-30 02:32:08 【问题描述】:这是我目前拥有的桌子。 我想将所有内容合并为一个 event_code 并将所有内容放在一行中。我检查了堆栈和谷歌并得到了不同的答案,这似乎无法解决我的问题。
我想要的是
**event_code : fs_rev : hs_rev : pp_rev : mp_rev : gp_rev : in_rev : broker**
LAK180918 : 619500 : 0 : 7000 : 0 : 5000 : 8500 : 17500
通过将所有列合并到一行下,我似乎无法找到有关如何执行此操作的答案。谁能建议我应该怎么做?
【问题讨论】:
这是 postgres 还是 redshift?它们根本不一样。请相应地编辑问题/标签。 请描述规则/逻辑,例如为什么 pp_rev =5000 你想要第一个非空值吗? 我正在使用 postgresql,并被告知它已连接到 aws-redshift。此外,如果您查看数据,pp_rev 的 event_code 是不同的,因此 918 应该有 7000,而 920 应该有 58000。我希望将所有行压缩成一个 要 100% 清楚您是使用 redshift 还是使用 postgres,它们是不同的。不管你被告知这是什么情况!我明白你对事件代码不同的意思。因此,如果事件代码中有 2 个或更多,您的要求是获得最高值? 据我所知,这是一个连接到亚马逊 redshift 的 Navicat 软件,它在我这边使用 postgresql。要求是获得一行,其中每列显示一个值。正如您所看到的,每一行都有一个带有值的列,而其余部分为空,我需要将这些全部压缩成一行 【参考方案1】:您可以使用 Max 或 Min 函数。我假设事件中的每一列只有一个有效值。
select event_code, max(fs_rev),max(hs_rev),max(pp_rev),max(mp_rev)
,max(gp_rev),max(in_rev),max(broker)
from table
group by event_code
【讨论】:
谢谢。我现在觉得自己像个白痴,没有看到这么简单的解决方案。这解决了它以上是关于PostgreSQL:如何将多行的值放在不同的列中,并将所有值合并到一行中?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 BigQuery 的标准 SQL 中解析具有不同日期字符串的列中的值
如何在具有相同 ID 的列中选择不同的值然后删除它们 PHP SQL Server