MySQL中函数CONCAT&CONCAT_WS及GROUP_CONCAT

来源:互联网 发布:淘宝一千零一夜报名 编辑:程序博客网 时间:2024/04/30 06:17

表结构


CREATE TABLE `test3` (
  `id` int(5) unsigned NOT NULL AUTO_INCREMENT,
  `name1` varchar(10) DEFAULT NULL,
  `name2` varchar(10) DEFAULT NULL,
  `cnt` int(2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1


数据

rank1subrank11
2 rank1 subrank1 2
3 rank2 subrank1 7
4 rank2 subrank2 2
5 rank3 subrank1 1
6 rank1 subrank2 3


CONCAT的语法 CONCAT(str1,str2,…)   

sql 的实际执行情况 SELECT *,CONCAT(id,',',name1,'--',name2) AS con FROM test3;


rank1subrank111,rank1--subrank1
2 rank1 subrank1 2 2,rank1--subrank1
3 rank2 subrank1 7 3,rank2--subrank1
4 rank2 subrank2 2 4,rank2--subrank2
5 rank3 subrank1 1 5,rank3--subrank1
6 rank1 subrank2 3 6,rank1--subrank2



CONCAT_WS的语法CONCAT_WS(separator,str1,str2,…)



sql 的实际执行情况 SELECT *,CONCAT_WS(',',id,name1,name2) AS con FROM test3;


1rank1subrank111,rank1,subrank1
2 rank1 subrank1 2 2,rank1,subrank1
3 rank2 subrank1 7 3,rank2,subrank1
4 rank2 subrank2 2 4,rank2,subrank2
5 rank3 subrank1 1 5,rank3,subrank1
6 rank1 subrank2 3 6,rank1,subrank2

可以看出CONCAT_WS 是CONCAT的特殊情况, 制定加入字符串间的 符号,无需分别指明






group_concate的语法  select  str1,...group by (strx) from  table group  by str1;

可以将按照字符串分组时,分组

建表:

CREATE TABLE `test4` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

数据:

insert  into test4  (id,name) values (1,"aa"),(1,"bb"),(1,"cc"),(2,"dd"),(2,"ee"),(3,"ff");

sql语句:

select id ,group_concat(name) from  test4 group by id;

select id ,group_concat(name separator  ';') from  test4 group by id;  使用自定义分隔符


结果:

aa,bb,cc
2 dd,ee
3 ff

可以 使用group_concat 将 使用 group by时去除的重复列的数据去除,组成新的一列;


group_concat(参数) 其中 参数 可以是   "字段"或"字符串"

以下是sql 错误时发现的现象,可以部分说明group_concat 的执行原理

select id ,group_concat("name") from  test4 group by id;


name,name,name
2 name,name
3 name

可以说明 group_concat  是先计算group by str 的  每一个分组中的去除重复列的 数目,再使用 group_concat("参数") 替换




0 0
原创粉丝点击