LISTAGG
在oracle 中经常使用
在 MySQL 中,虽然没有名为 LISTAGG
的内置函数,但可以通过 GROUP_CONCAT
函数实现类似的功能——将多行数据按分组合并为单个字符串。以下是详细用法和示例:
示例
表
CREATE TABLE employees ( id INT AUTO_INCREMENT PRIMARY KEY, -- 增加一个自增的主键ID dept VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL );
INSERT INTO employees (dept, name) VALUES ('IT', 'Alice'), ('IT', 'Bob'), ('HR', 'Carol'), ('IT', 'Alice'), -- 注意这里有重复的名字 ('HR', 'David');
SELECTdept,GROUP_CONCAT(name) AS members FROMemployees GROUP BYdept;
去重
与其他数据库对比
数据库 | 函数 | 特点 |
---|---|---|
MySQL | GROUP_CONCAT | 支持去重、排序、自定义分隔符 |
Oracle | LISTAGG | 语法简洁,但早期版本不支持去重 |
SQL Server | STRING_AGG | 类似 MySQL,需 SQL Server 2017+ |
PostgreSQL | STRING_AGG | 功能与 MySQL 相似 |