如何从具有相同 id 的多行中选择仅一行的值并用 - 分隔它们? [复制]

Posted

技术标签:

【中文标题】如何从具有相同 id 的多行中选择仅一行的值并用 - 分隔它们? [复制]【英文标题】:How to select values from many rows that has the same id to just one row and separate them with -? [duplicate] 【发布时间】:2019-12-08 12:55:48 【问题描述】:

我想在一行中显示具有相同 id 的表的值,并用- 分隔它们,或者,

 row id | base_id | auth_id
--------+---------+---------
      4 |       1 |       1
      5 |       1 |       3
      6 |       2 |       2
      7 |       2 |       6
      8 |       2 |       5

我期待的结果

 row id | base_id | auth_id
--------+---------+---------
      1 |       1 | 1-3
      2 |       2 | 2-6-5

【问题讨论】:

您使用的是 mysql 还是 Postgres?它们是不同的数据库。 对不起,我用的是postgres 真的还在使用 Postgres 9.1 吗?在这种情况下,您应该立即计划升级到当前(支持的)版本。 【参考方案1】:

您可以使用string_agg() 连接和row_number() 窗口解析功能:

select row_number() over (order by base_id) as row_id, 
       base_id, string_agg(auth_id::varchar,'-' order by auth_id) as auth_id
  from tab
 group by base_id;

Demo

【讨论】:

编译器说“函数 string_agg() 不存在” @RezaPratama 是的,需要转换为 varchar。【参考方案2】:

使用string_agg试试这个选项:

select
    row_number() over (order by base_id) row_id,
    base_id,
    string_agg(auth_id, '-' order by auth_id)
from your_table
group by
    base_id
order by
    base_id;

【讨论】:

以上是关于如何从具有相同 id 的多行中选择仅一行的值并用 - 分隔它们? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如果行具有匹配的 ID,则将多行中的值合并为一行(单独的单元格)。如果 ID 只存在一次,则为 NULL 值

Oracle 8i 从具有相同 ID 但不同状态的多行数据集中选择查询

主表连接多行从表数据转成一行并用逗号连接

Mysql - 仅返回具有相同唯一 ID 的第一行

如何选择(所有)表 1 中的一行,该行具有与表 2 相同的另一行

如何在pyspark中使用具有相同客户ID的新数据框的值更新一行旧数据框