首页 >数据库 >mysql教程 >如何使用 SQL 将多行连接成一行?

如何使用 SQL 将多行连接成一行?

DDD
DDD原创
2025-01-15 08:48:43177浏览

How Can I Concatenate Multiple Rows into a Single Row Using SQL?

使用 SQL 将多行合并为一行

许多数据库任务需要将一列中具有相同值的多行合并为一行,并连接另一列中的值。 想象一个电影数据库,其中每部电影的演员在单独的行中列出:

<code>Movie | Actor
----------------
A      1
A      2
A      3
B      4</code>

目标是创建如下结果集:

<code>Movie | ActorList
----------------
A      1, 2, 3
B      4</code>

使用字符串聚合进行合并

SQL 的 string_agg 函数提供了一个高效的解决方案。此聚合函数连接指定列中的值。这是查询:

<code class="language-sql">SELECT movie, string_agg(actor::text, ', ') AS actor_list
FROM tbl
GROUP BY movie;</code>

详细内容如下:

  1. string_agg(actor::text, ', '):此部分使用逗号和空格作为分隔符连接 actor 列值。 ::text 显式地将 actor 列转换为文本,如果它还不是文本数据类型,则这是必需的。
  2. GROUP BY movie:这按 movie 列对行进行分组,确保同一部电影的演员聚合在一起。
  3. actor_list:这是生成的连接字符串的别名。

增强功能和注意事项:

  • 数据类型:确保要聚合的列是文本类型。 如果没有,请使用显式强制转换(如上面所示的 ::text)。
  • 排序: 要对每个列表中的演员进行排序,请在 ORDER BY 内添加 string_agg
<code class="language-sql">SELECT movie, string_agg(actor::text, ', ' ORDER BY actor) AS actor_list
FROM tbl
GROUP BY movie;</code>

这种查询内排序通常比对最终结果集进行排序更有效。

这种方法有效地将多行合并为一个更易于管理的行,使数据分析和报告更加简单。

以上是如何使用 SQL 将多行连接成一行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn