前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3分钟短文 | MySQL在分组时,把多列合并为一个字段!

3分钟短文 | MySQL在分组时,把多列合并为一个字段!

作者头像
程序员小助手
发布2020-08-18 14:26:52
2.5K0
发布2020-08-18 14:26:52
举报
文章被收录于专栏:程序员小助手程序员小助手

引言

今天我们来说一个MySQL查询的例子,比如有一个统计需求, 分组后的数据,我们知道只能使用聚合函数进行统计, 那如果要根据分组约定,将一系列的值合并到单个字段显示出来, 应该怎么写呢?

学习时间

首先我们准备数据,有一个用户喜好表,记录了用户的喜好。比如这样:

代码语言:javascript
复制
SELECT hobbies FROM peoples_hobbies WHERE person_id = 5; 

结果很多行数据:

代码语言:javascript
复制
shopping
fishing
coding 

那么问题来了,如果需要的输出类似于

代码语言:javascript
复制
shopping, fishing, coding 

一行展示就够了,不要多行展示,应该怎么写呢?或者说MySQL有没有这个能力处理呢?

当然是有的。MySQL贴心地给出了 GROUP_CONCAT 函数,用于使用分隔符连接多行字段的值。比如说按照 person_id 进行分组,然后第二列输出用户喜好,使用逗号分隔符:

代码语言:javascript
复制
SELECT person_id, GROUP_CONCAT(hobbies SEPARATOR ', ') AS all_hobbies FROM peoples_hobbies GROUP BY person_id; 

当然了,peoples_hobbies 表完全有可能在 hobbies 字段有重复的值,我们也可以进行唯一性筛选。把上述SQL语句改造一下:

代码语言:javascript
复制
SELECT person_id, GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ') AS all_hobbies FROM peoples_hobbies GROUP BY person_id; 

写到这里基本上已经可以满足使用了。可是我们还可以再进一步。比如对我们的输出字段进行排序后再使用分隔符连接。

代码语言:javascript
复制
SELECT person_id, GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ') AS all_hobbies FROM peoples_hobbies GROUP BY person_id; 
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小助手 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 学习时间
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档