MySQL GROUP BY 和 GROUP_CONCAT 使用方法总结,group by后将其他的字段整合到一个字段中 并通过逗号链接或指定其他链接符号
MySQL GROUP BY 和 GROUP_CONCAT 使用方法总结
GROUP BY 基本用法
- 作用:将查询结果按指定列进行分组
- 语法:
SELECT column_list FROM table_name GROUP BY column_name - 注意事项:SELECT 子句中的非聚合列必须出现在 GROUP BY 子句中
GROUP_CONCAT 基本用法
- 作用:将分组内的值连接成一个字符串
- 语法:
GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC]] [SEPARATOR str_val]) - 默认分隔符:逗号
,
具体示例及执行结果
示例1:基本 GROUP BY 分组统计
-- 创建示例表
CREATE TABLE `employees` (`department` VARCHAR(50),[name] VARCHAR(50),`salary` INT
);INSERT INTO `employees` VALUES
('IT', 'Alice', 8000),
('IT', 'Bob', 7500),
('HR', 'Charlie', 6000),
('HR', 'David', 6500),
('IT', 'Eve', 9000);-- 按部门分组统计员工数量和平均工资
SELECT `department`,COUNT(*) as employee_count,AVG(`salary`) as avg_salary
FROM `employees`
GROUP BY `department`;
执行结果:
department | employee_count | avg_salary
IT | 3 | 8166.6667
HR | 2 | 6250.0000
示例2:GROUP_CONCAT 基本用法
-- 按部门分组并连接员工姓名
SELECT `department`,GROUP_CONCAT([name] as employees
FROM `employees`
GROUP BY `department`;
执行结果:
department | employees
IT | Alice,Bob,Eve
HR | Charlie,David
示例3:GROUP_CONCAT 高级用法
-- 使用 DISTINCT、ORDER BY 和自定义分隔符
SELECT `department`,GROUP_CONCAT(DISTINCT [name] ORDER BY `salary` DESC SEPARATOR '; ') as employees_by_salary
FROM `employees`
GROUP BY `department`;
执行结果:
department | employees_by_salary
IT | Eve; Alice; Bob
HR | David; Charlie
示例4:设置 GROUP_CONCAT 最大长度
-- 查看当前最大长度设置
SELECT @@group_concat_max_len;-- 设置最大长度并测试长字符串连接
SET SESSION group_concat_max_len = 1000;
关键特性说明
GROUP_CONCAT默认受group_concat_max_len系统变量限制(默认1024字符)- 可以使用
DISTINCT去除重复值 - 支持
ORDER BY对连接前的数据排序 - 可通过 [SEPARATOR] 参数自定义分隔符
注意:以上内容由大模型生成,注意识别!
