GBase 8s
其他
文章

南大通用GBase 8s group_concat函数 功能介绍

发表于2026-08-19 17:37:18479次浏览3个评论

一、什么是 GROUP_CONCAT?

GROUP_CONCAT 是 SQL 中一个聚合函数,它将多个行的值连接成一个字符串,常用于分组查询时将多行数据合并为一行。

二、基本语法

GROUP_CONCAT([DISTINCT] column_name 
            [ORDER BY order_column ASC/DESC] 
            [SEPARATOR 'separator'])
- DISTINCT:可选,去除重复值
- ORDER BY:可选,指定连接值的排序
- SEPARATOR:可选,指定分隔符(默认为逗号,)

三、简单示例

注:以下用例在GBase8sV8.8_AEE_3.6.5_RC2_MY_2_8107a4版本中运行

-- 创建表,需要在mysql模式下执行
set environment sqlmode ‘mysql’;
CREATE TABLE students (
   id INT PRIMARY KEY AUTO_INCREMENT,
   name VARCHAR(50) NOT NULL,
   class VARCHAR(10) NOT NULL,
   subject VARCHAR(20) NOT NULL
);
-- 插入示例数据
INSERT INTO students (id, name, class, subject) VALUES
(1, '张三', 'A班', '数学'),
(2, '李四', 'A班', '英语'),
(3, '王五', 'A班', '数学'),
(4, '赵六', 'B班', '物理'),
(5, '钱七', 'B班', '化学');

示例 1:基础用法

-- 获取每个班级的所有学生姓名(用逗号分隔)
> SELECT class, GROUP_CONCAT(name) AS students
FROM students
GROUP BY class;
结果:
CLASS     A班
STUDENTS  张三,李四,王五
CLASS     B班
STUDENTS  赵六,钱七
2 row(s) retrieved.

示例 2:使用 DISTINCT 去重

-- 获取每个班级的不重复科目
> SELECT class, GROUP_CONCAT(DISTINCT subject) AS subjects
FROM students
GROUP BY class;
结果:
CLASS     A班
SUBJECTS  数学,英语
CLASS     B班
SUBJECTS  化学,物理
2 row(s) retrieved.

示例 3:自定义分隔符

-- 使用分号作为分隔符
> SELECT class,
      GROUP_CONCAT(name SEPARATOR ';') AS students
FROM students
GROUP BY class;
结果:
CLASS     A班
STUDENTS  张三;李四;王五
CLASS     B班
STUDENTS  赵六;钱七
2 row(s) retrieved.

示例 4:排序

-- 按字母顺序排序姓名
> SELECT class,
      GROUP_CONCAT(name ORDER BY name ASC) AS students
FROM students
GROUP BY class;
结果:
CLASS     A班
STUDENTS  张三,李四,王五
CLASS     B班
STUDENTS  赵六,钱七
2 row(s) retrieved.

GROUP_CONCAT 是一个强大的 SQL 函数,特别适合需要将多行数据合并展示的场景。掌握它可以大大简化某些复杂查询,提高数据处理效率。记得根据实际需求选择合适的参数(去重、排序、分隔符),并注意长度限制问题。

评论

登录后才可以发表评论
用户头像
GBase用户28017发表于 2个月前
很详实。
GBase用户51829发表于 2个月前
聚合函数,把同一个分组内多行的字段值,拼接合并成一条字符串。
用户头像
郝老师发表于 2个月前
示例具有业务性!相比于手册中出现的 t1 col1等随意取名的表活着字段名称,专业很多