MySQL的聚合函数 GROUP_CONCAT()


一.背景

  • 今天在数据开发项目时,遇到一个需求,需要把多行数据以某几个字段为键,将同列或多列的多行数据拼成一行数据。

二. MySQL中聚合函数 GROUP_CONCAT()的使用

  1. 概述:MySQL中,聚合函数GROUP_CONCAT()用指定分隔符连接字符串。
  2. 通常使用
    1. 多行变一列:【语法:group_concat(列名或与其他字符拼接 Separator ‘分隔符’)】
    2. 扩展一下:多行变多列(不使用该聚合函数)

2.1 多行变一列

  1. 原数据结构
idfamilynamecodenamebizkeyvalue
1zijikanwa001大学爱好打球
2zijikanwa001大学职务社长
3zijikanwa001大学特长架子鼓
4yuanyuan007大学爱好睡觉
5yuanyuan007大学职务组员
6yuanyuan007大学特长看剧
7xixi110研究生爱好看小说
8xixi110研究生职务团委
9xixi110研究生特长瑜伽
  1. 执行sql
select familyname, codename, biz, group_concat(key,'=',value Separator ',') as key_value from tableA 
group by familyname,codename,biz
  1. 执行结果
idfamilynamecodenamebizkey-value
1zijikanwa001大学爱好=打球,职务=社长,特长=架子鼓
2yuanyuan007大学爱好=睡觉,职务=组员,特长=看剧
3xixi110研究生爱好=看小说,职务=团委,特长=瑜伽

2.2 扩展:多行变多列

  1. 原数据结构
idfamilynamecodenamebizkeyvalue
1zijikanwa001大学爱好打球
2zijikanwa001大学职务社长
3zijikanwa001大学特长架子鼓
4yuanyuan007大学爱好睡觉
5yuanyuan007大学职务组员
6yuanyuan007大学特长看剧
7xixi110研究生爱好看小说
8xixi110研究生职务团委
9xixi110研究生特长瑜伽
  1. 执行sql
select familyname, codename, biz, 
max(CASE key WHEN '爱好' THEN value ELSE '' END) as '爱好',
max(CASE key WHEN '职务' THEN value ELSE '' END) as '职务',
max(CASE key WHEN '特长' THEN value ELSE '' END) as '特长'
from tableA 
group by familyname,codename,biz
  1. 执行结果
idfamilynamecodenamebiz爱好职务特长
1zijikanwa001大学打球社长架子鼓
2yuanyuan007大学睡觉组员看剧
3xixi110研究生看小说团委瑜伽

三. Oracle中聚合函数 WM_CONCAT()的使用

1. 函数概述

  1. 命令格式
string wm_concat(string <separator>, string <colname>)
  1. 参数说明
    • separator:必填。STRING类型常量,分隔符。
    • colname:必填。STRING类型。如果输入为BIGINT、DOUBLE或DATETIME类型,会隐式转换为STRING类型后参与运算。

2. 使用示例

  1. 原数据结构
idfamilynamecodenamebizkeyvalue
1zijikanwa001大学爱好打球
2zijikanwa001大学职务社长
3zijikanwa001大学特长架子鼓
4yuanyuan007大学爱好睡觉
5yuanyuan007大学职务组员
6yuanyuan007大学特长看剧
7xixi110研究生爱好看小说
8xixi110研究生职务团委
9xixi110研究生特长瑜伽
  1. 执行sql
select familyname, codename, biz, wm_concat(',', key || '=' || value) as key_value from tableA 
group by familyname,codename,biz
  1. 执行结果
idfamilynamecodenamebizkey-value
1zijikanwa001大学爱好=打球,职务=社长,特长=架子鼓
2yuanyuan007大学爱好=睡觉,职务=组员,特长=看剧
3xixi110研究生爱好=看小说,职务=团委,特长=瑜伽

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值