Mysql下GROUP_CONCAT使用

之前遇到一个这样的小需求:数据表里面每一行里面存放的是每个用户每个因子的得分数(一个用户共有23个因子),而我们需要得到的报表是按用户为维度排列出每个用户的因子得分记录,其中每行记录显示的是该用户23个因子的得分记录值。

该需求是要实现将一张表里面相同ID的多行转换成一个ID一行多列的形式展现,如下图所示(该例子中的表名假定为A):

ID      SCORE                   ID           SCORE

1        10                            1             10,20

1        20                            2             30,20

2        30            转换为  3     15

2        20

3        15

(表A多行转一行)

Mysql的GROUP_CONCAT函数可以很好地帮我们解决这个问题,不需要通过程序端遍历去拼凑。这里简单记录下GROUP_CONCAT的使用。

完整语法如下:

group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符‘])

以上述表A为例子:

要想获取到右边的展现形式,则可用下列语句获得。

select a.id,group_concat(score) as scoreStr from A a group by a.id;

默认获得的分隔符是“,”,如果想自定义分隔符,则用Separator,也可以使用DISTINCT对要链接的字段进行去重。具体参考语法格式。

Mysql官方文档:

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

时间: 2024-10-31 00:29:28

Mysql下GROUP_CONCAT使用的相关文章

MySQL中group_concat函数 --- 很有用的一个用来查询出所有group by 分组后所有 同组内的 内容

本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 基本查询 mysql> select * from aa; +------+------+ | id| name | +------+------+ |1 |

【转】mysql的group_concat函数,默认最大长度是1024

mysql的group_concat函数,默认最大长度是1024 查询sql: show variables like 'group_concat_max_len'; 设置方式: 修改配置文件my.ini: 在[mysqld]下新增配置:group_concat_max_len = 4294967295; 注意是:在[mysqld]下新增:在[mysqld]下新增:在[mysqld]下新增:重要的事情说三遍. 然后重启mysql服务,然后通过上面的查询sql进行查看是否生效. 如果是生产环境,不

MySQL Study之--MySQL下图形工具的使用(phpMyAdmin)

MySQL Study之--MySQL下图形工具的使用(phpMyAdmin) 系统环境: RedHat EL6 数据库:  MySQL 5.6.4-m7 phpMyAdmin是一个用PHP编写的软件工具,是以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库.借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便.其中一个更大的优势在于由于phpMyAdmin跟其他PHP

Rsyslog+Loganalyer+MySQL下部署日志服务器

Rsyslog+Loganalyer+MySQL下部署日志服务器 准备工作(三台Centos服务器Centos7): MySQL服务器(192.168.1.70):收集储存管理日志 web/Rsyslog服务器(192.168.1.52):搭建httpd服务,提供在web端查看日志信息 测试服务器(192.168.1.71):生成日志,并将日志信息发送给Rsyslog服务器 关闭防火墙和selinux 配置MySQL服务器 安装MySQL服务,创建用户,授权对Syslog数据库的访问. #yum

mysql下的SELECT INTO语句

在mysql下使用SELECT INTO语句会产生ERROR 1327 (42000): Undeclared variable:new_tablename 此时要使用: CREATE TABLE CYRTEMP(SELECT Cno,COUNT(Sno),AVG(Score) FROM CYRReports GROUP BY(Cno)); 来替代原句: SELECT Cno,COUNT(Sno),AVG(Score) INTO SUM_AVGSco FROM CYRReports GROUP

关于mysql函数GROUP_CONCAT

GROUP_CONCAT()是MySQL数据库提供的一个函数,通常跟GROUP BY一起用,具体可参考MySQL官方文挡:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat. 语法: GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC |DESC]

mysql函数GROUP_CONCAT()

mysql 中 GROUP_CONCAT()函数,主要用来处理一对多的查询结果,通常会结合GROUP BY一起使用. 语法: 1 GROUP_CONCAT([DISTINCT] expr [,expr ...] 2 3 [ORDER BY {unsigned_integer | col_name | expr} 4 5 [ASC | DESC] [,col_name ...]] 6 7 [SEPARATOR str_val]) 测试数据: 学生表(student) 课程表(course) 学生选

MySQL的group_concat与Oracle的wm_concat使用区别

Oracle的wm_concat在拼接时,如果字段内容为空结果为空,null类型相加不受影响. MySQL的group_concat拼接时,如果不设置Separator,字段内容为空时不会得到空的结果,默认会以",,,,,,"这种形式返回结果. select group_concat( (case when [.....] then '' else '1' end) Separator '')

mysql下怎样运行脚本

假设要运行脚本: F:\hello world\niuzi.sql 第一种方法:        在命令行下(未连接数据库),输入 mysql -h localhost -u root  -p < F:\hello world\niuzi.sql (注意路径不用加引号的!!). 第二种方法:        在命令行下(已连接数据库,此时的提示符为 mysql> ),输入 source  F:\hello world\niuzi.sql (注意路径不用加引号的) 或者 \. F:\hello wo