• LISTAGG () 和STRING_AGG () 函数的区别与简单使用


    1:区别

    LISTAGG STRING_AGG 都是用于在 SQL 查询中将多个值合并为单个字符串的函数,但它们属于不同的数据库系统。

    • LISTAGG Oracle 数据库中的聚合函数,用于将多行的值合并为一个字符串,并且可以指定分隔符。
    • STRING_AGGSQL Server 中的聚合函数,也用于将多行的值合并为一个字符串,并且可以指定分隔符。

    2:语法结构

    2.1 LISTAGG 函数的语法结构如下:

    1. LISTAGG(expression, delimiter) WITHIN GROUP
    2. (ORDER BY order_expression) [OVER (analytic_clause)]
    • expression:要合并的表达式,通常是一个列或计算值。
    • delimiter:用于分隔合并的值的分隔符。
    • ORDER BY order_expression:可选部分,用于指定合并的顺序。如果不提供 ORDER BY 子句,合并的顺序将不受控制。
    • analytic_clause:可选部分,通常用于窗口函数。在常规用法中,这部分通常不会出现。

    2.2 STRING_AGG 函数的语法结构如下: 

    STRING_AGG (expression, separator)
    
    • expression:要合并的表达式,通常是一个列或计算值。
    • separator:用于分隔合并的值的分隔符。

    3  示例:

    假设我们有一个名为 employees 的表,包含以下字段:

    • employee_id (员工ID)
    • employee_name (员工姓名)
    • department (所属部门)

    以下是表结构示例:

    1. CREATE TABLE employees (
    2. employee_id INT,
    3. employee_name VARCHAR(50),
    4. department VARCHAR(50)
    5. );
    6. INSERT INTO employees (employee_id, employee_name, department)
    7. VALUES
    8. (1, 'John', 'HR'),
    9. (2, 'Alice', 'IT'),
    10. (3, 'Bob', 'IT'),
    11. (4, 'Mary', 'HR'),
    12. (5, 'Eva', 'Finance');

    现在,让我们使用 LISTAGGSTRING_AGG 函数来合并员工姓名,并按部门进行分组:

    3.1 在 Oracle 中使用 LISTAGG

    1. SELECT department, LISTAGG(employee_name, ', ')
    2. WITHIN GROUP (ORDER BY employee_name) AS employees
    3. FROM employees
    4. GROUP BY department;

    3.2 在 SQL Server 中使用 STRING_AGG

    1. SELECT department,
    2. STRING_AGG(employee_name, ', ') AS employees
    3. FROM employees
    4. GROUP BY department;

    3.3 查询结果

    这些查询将根据部门将员工姓名合并为一个以逗号分隔的字符串。结果如下:

    1. Department | Employees
    2. -----------|---------------
    3. Finance | Eva
    4. HR | John, Mary
    5. IT | Alice, Bob

    上述示例演示了如何使用 LISTAGGSTRING_AGG 函数在不同数据库系统中将多个值合并为一个字符串,并按部门分组。结果显示了每个部门及其对应的员工姓名。

  • 相关阅读:
    美团基于 Flink 的实时数仓平台建设新进展
    Spring Boot集成WebSocket以及基本使用
    地理空间数据共享资源大汇总
    [算法题] 安排会议室——贪心算法的应用
    【mysql是怎样运行的】- 启动项、系统变量、状态变量(mysql客户端连接就是一个会话连接)
    大一新生?职场新人?想买电脑该怎么选?
    指针数组与数组指针的区别
    第五课 树与图
    STL--List--与正反向迭代器复写
    武汉新时标文化传媒有限公司抖音小店提高价格的商品还有人买吗?
  • 原文地址:https://blog.csdn.net/XikYu/article/details/134005132