【MySQL、Oracle、SQLserver、postgresql】查询多条数据合并成一行

news2025/3/6 2:45:40

四大数据库多行合并为单行:函数详解与对比

  • 一、MySQL
        • **`GROUP_CONCAT()`** 函数说明:
            • 语法结构:
            • 参数解释:
            • 示例:
            • 注意事项:
  • 二、Oracle
        • **`LISTAGG()`** 函数说明:
            • 语法结构:
            • 参数解释:
            • 示例:
            • 注意事项:
  • 三、SQL Server
        • **`STRING_AGG()`** 函数说明:
            • 语法结构:
            • 参数解释:
            • 示例:
            • 旧版本替代方案:
  • 四、PostgreSQL
        • **`STRING_AGG()`** 函数说明:
            • 语法结构:
            • 参数解释:
            • 示例:
            • 特殊用法:
  • 对比总结表格

一、MySQL

GROUP_CONCAT() 函数说明:
  • 将分组后的多行数据按指定分隔符合并为单行字符串,支持去重、排序和自定义分隔符。
语法结构:
GROUP_CONCAT(
  [DISTINCT] 列名 
  [ORDER BY 排序列 [ASC|DESC]] 
  [SEPARATOR '分隔符']
)
参数解释:
  • DISTINCT:可选,对结果去重
  • ORDER BY:可选,控制合并顺序
  • SEPARATOR:可选,默认逗号分隔
示例:
SELECT 
  username,
  GROUP_CONCAT(DISTINCT coursename ORDER BY coursename DESC SEPARATOR '|') AS courses
FROM t_user_course
GROUP BY username;
注意事项:
  • 默认最大长度由 group_concat_max_len 参数控制(默认1024字节)
  • 超长内容会被截断,可通过 SET group_concat_max_len=2048; 调整

二、Oracle

LISTAGG() 函数说明:
  • 将分组内数据按指定顺序和分隔符拼接为字符串,自动处理NULL值,常用于行转列场景。
语法结构:
LISTAGG(列名 [, '分隔符']) 
  WITHIN GROUP (ORDER BY 排序列 [ASC|DESC])
参数解释:
  • 分隔符:可选,默认无分隔符
  • WITHIN GROUP:必选,指定排序规则
示例:
SELECT 
  username,
  LISTAGG(coursename, ';') WITHIN GROUP (ORDER BY create_time) AS courses
FROM t_user_course
GROUP BY username;
注意事项:
  • 严格长度限制:返回结果不得超过 4000字符
  • 超长处理方案:
    CLOB类型:XMLAGG(XMLELEMENT(e, coursename, ‘,’).EXTRACT(‘//text()’)).GETCLOBVAL()

三、SQL Server

STRING_AGG() 函数说明:
  • 将分组结果拼接为字符串,需预先排序,支持分隔符自定义。
语法结构:
STRING_AGG(列名, '分隔符') [WITHIN GROUP (ORDER BY 排序列)]
参数解释:
  • 分隔符:必选参数
  • WITHIN GROUP:可选,2017版本后支持排序
示例:
SELECT 
  username,
  STRING_AGG(coursename, ',') WITHIN GROUP (ORDER BY score DESC) AS courses
FROM t_user_course
GROUP BY username;
旧版本替代方案:
SELECT 
  username,
  courses = STUFF((
    SELECT ',' + coursename 
    FROM t_user_course 
    WHERE username = a.username 
    FOR XML PATH('')
  ), 1, 1, '')
FROM t_user_course a
GROUP BY username;

四、PostgreSQL

STRING_AGG() 函数说明:
  • 聚合函数中灵活性最高,支持大文本(1GB限制),可配合FILTER子句使用。
语法结构:
STRING_AGG(列名, '分隔符' [ORDER BY 排序列])
参数解释:
  • 分隔符:必选参数
  • ORDER BY:直接内联排序控制
示例:
SELECT 
  username,
  STRING_AGG(coursename, '|' ORDER BY course_id) AS courses
FROM t_user_course
GROUP BY username;
特殊用法:
-- 配合DISTINCT使用
STRING_AGG(DISTINCT coursename, ',')
-- 配合FILTER子句
STRING_AGG(coursename, ',' ORDER BY ...) FILTER (WHERE score > 60)

对比总结表格

功能特性MySQLOracleSQL ServerPostgreSQL
基础函数GROUP_CONCAT()LISTAGG()STRING_AGG()STRING_AGG()
排序控制ORDER BY子句内WITHIN GROUP内WITHIN GROUP子句直接内联ORDER BY
去重支持支持DISTINCT需配合子查询需配合子查询支持DISTINCT
空值处理自动跳过NULL自动跳过NULL自动跳过NULL保留NULL占位
长度限制受参数控制4000字符硬限制无明确限制1GB大对象支持
分隔符默认值逗号无(必须显式指定)无(必须显式指定)无(必须显式指定)
可根据实际场景选择最合适的实现方案,建议优先使用各数据库的官方推荐聚合函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2310310.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解锁Egg.js:从Node.js小白到Web开发高手的进阶之路

一、Egg.js 是什么 在当今的 Web 开发领域,Node.js 凭借其事件驱动、非阻塞 I/O 的模型,在构建高性能、可扩展的网络应用方面展现出独特的优势 ,受到了广大开发者的青睐。它让 JavaScript 不仅局限于前端,还能在服务器端大展身手&…

JavaWeb后端基础(4)

这一篇就开始是做一个项目了,在项目里学习,我主要记录在学习过程中遇到的问题,以及一些知识点 Restful风格 一种软件架构风格 在REST风格的URL中,通过四种请求方式,来操作数据的增删改查。 GET : 查询 …

【文献阅读】The Efficiency Spectrum of Large Language Models: An Algorithmic Survey

这篇文章发表于2024年4月 摘要 大语言模型(LLMs)的快速发展推动了多个领域的变革,重塑了通用人工智能的格局。然而,这些模型不断增长的计算和内存需求带来了巨大挑战,阻碍了学术研究和实际应用。为解决这些问题&…

OpenGL ES -> GLSurfaceView纹理贴图

贴图 XML文件 <?xml version"1.0" encoding"utf-8"?> <com.example.myapplication.MyGLSurfaceViewxmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height…

DE2115实现4位全加器和3-8译码器(FPGA)

一、配置环境 1、Quartus 18.1安装教程 软件&#xff1a;Quartus版本&#xff1a;Quartus 18.1语言&#xff1a;英文大小&#xff1a;5.78G安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09; 下载通道①百度网盘丨64位下载…

【AI大模型】DeepSeek + Kimi 高效制作PPT实战详解

目录 一、前言 二、传统 PPT 制作问题 2.1 传统方式制作 PPT 2.2 AI 大模型辅助制作 PPT 2.3 适用场景对比分析 2.4 最佳实践与推荐 三、DeepSeek Kimi 高效制作PPT操作实践 3.1 Kimi 简介 3.2 DeepSeek Kimi 制作PPT优势 3.2.1 DeepSeek 优势 3.2.2 Kimi 制作PPT优…

run方法执行过程分析

文章目录 run方法核心流程SpringApplicationRunListener监听器监听器的配置与加载SpringApplicationRunListener源码解析实现类EventPublishingRunListener 初始化ApplicationArguments初始化ConfigurableEnvironment获取或创建环境配置环境 打印BannerSpring应用上下文的创建S…

面试-----每日一题

一、字节一面&#xff08;操作系统&#xff09; 什么是死锁&#xff1f;如何处理死锁问题&#xff1f; 死锁是指两个或两个以上的进程在执行过程中&#xff0c;由于竞争资源或者由于彼此通讯而造成的一种阻塞的现象&#xff0c;若无外力作用&#xff0c;它们都将无法推进下去。…

CentOS 7中安装Dify

Dify 是一个开源的 LLM 应用开发平台。其直观的界面结合了 AI 工作流、RAG 管道、Agent、模型管理、可观测性功能等&#xff0c;让您可以快速从原型到生产。尤其是我们本地部署DeepSeek等大模型时&#xff0c;会需要用到Dify来帮我们快捷的开发和应用。 大家可以参考学习它的中…

qt-C++笔记之Linux下Qt环境变量设置及与QtCreator的关系

qt-C++笔记之Linux下Qt环境变量设置及与QtCreator的关系 code review! 文章目录 qt-C++笔记之Linux下Qt环境变量设置及与QtCreator的关系一.Qt关键的环境变量1.1.PATH1.2.LD_LIBRARY_PATH1.3.QML2_IMPORT_PATH二.若不手动设置这三个环境变量2.1.PATH 的默认路径2.2.LD_LIBRARY_…

Flutter 学习之旅 之 flutter 使用 carousel_slider 简单实现轮播图效果

Flutter 学习之旅 之 flutter 使用 carousel_slider 简单实现轮播图效果 目录 Flutter 学习之旅 之 flutter 使用 carousel_slider 简单实现轮播图效果 一、简单介绍 二、简单介绍 carousel_slider 三、安装 carousel_slider 四、简单案例实现 五、关键代码 一、简单介…

【JavaScript—前端快速入门】JavaScript 对象与函数

JavaScript 对象 1. JavaScripe 数组 创建数组的方式 使用 new 关键字创建 使用字面量方式创建 [常用] 注意&#xff0c;JavaScipt 不要求数组元素类型都相同&#xff1b; 数组操作 读&#xff1a;使用下标的方式访问数组元素&#xff08;从0开始) 保存代码&#xff0c;打开…

java中的局部变量

文章目录 一、定义二、作用域和作用位置三、声明周期和初始化四、内存管理五、Java内存区域划分六、例子 一、定义 在java中&#xff0c;局部变量指在方法、构造方法、代码块&#xff08;如{}包裹的语句块&#xff09;内部声明的变量 class work {{int a 10;}public work() {i…

(IDE接入DeepSeek)简单了解DeepSeek接入辅助开发与本地部署建议

重点&#xff1a;IDE接入DeepSeek是否收费 收费&#xff01; 本文章主要是为了给小白避雷&#xff0c;目前很多文章告诉大家怎么接入DeepSeek&#xff0c;但是并未告知大家是否收费。如果是想白嫖的&#xff0c;就可以不用去接入了。 一、引言 最近爆火的AI人工智能工具DeepSe…

【算法学习之路】5.贪心算法

贪心算法 前言一.什么是贪心算法二.例题1.合并果子2.跳跳&#xff01;3. 老鼠和奶酪 前言 我会将一些常用的算法以及对应的题单给写完&#xff0c;形成一套完整的算法体系&#xff0c;以及大量的各个难度的题目&#xff0c;目前算法也写了几篇&#xff0c;题单正在更新&#xf…

0x03 http协议和分层架构

HTTP协议 简介 Hyper Text Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则 http协议基于TCP协议&#xff1a;面向连接&#xff0c;安全基于请求-响应模型&#xff1a;一次请求对应一次响应HTTP协议是无状态的协议&#xff…

智能合约安全指南 [特殊字符]️

智能合约安全指南 &#x1f6e1;️ 1. 安全基础 1.1 常见漏洞类型 重入攻击整数溢出权限控制缺陷随机数漏洞前后运行攻击签名重放 1.2 安全开发原则 最小权限原则检查-生效-交互模式状态机安全失败保护机制 2. 重入攻击防护 2.1 基本防护模式 contract ReentrancyGuarde…

【Python项目】基于Python的书籍售卖系统

【Python项目】基于Python的书籍售卖系统 技术简介&#xff1a;采用Python技术、MYSQL数据库等实现。 系统简介&#xff1a;书籍售卖系统是一个基于B/S结构的在线图书销售平台&#xff0c;主要分为前台和后台两部分。前台系统功能模块分为&#xff08;1&#xff09;用户中心模…

【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(未成功版)

【Linux】【网络】UDP打洞–>不同子网下的客户端和服务器通信&#xff08;未成功版&#xff09; 上次说基于UDP的打洞程序改了五版一直没有成功&#xff0c;要写一下问题所在&#xff0c;但是我后续又查询了一些资料&#xff0c;成功实现了&#xff0c;这次先写一下未成功的…

(1)udp双向通信(2)udp实现文件复制(3)udp实现聊天室

一.udp双向通信 1.fork进程实现双向通信 【1】head.h 【2】client客户端 &#xff08;1&#xff09;父进程从键盘获取字符串 &#xff08;2&#xff09;输入quit&#xff0c;发送结束子进程信号 &#xff08;3&#xff09;exit退出父进程 &#xff08;1&#xff09;子进程接受…