• 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 函数在不同数据库系统中将多个值合并为一个字符串,并按部门分组。结果显示了每个部门及其对应的员工姓名。

  • 相关阅读:
    绕过WAF(Web应用程序防火墙)--介绍、主要功能、部署模式、分类及注入绕过方式等
    【重磅+测评】Jetbrain发布Rust IDE,免费使用一年
    编译原理如何写出不带回溯的递归子程序?
    H5移动端便捷兼容测试方式
    分布式日志部署
    基于miniprogram-ci的微信小程序的CI以及接入钉钉通知
    解决requests库中UnicodeError异常的问题
    【Linux】Rocky 9.0 Podman服务无法正常启动
    cdh3.6.2集成zeppelin0.10.1及简单使用
    Python的命令行参数
  • 原文地址:https://blog.csdn.net/XikYu/article/details/134005132