普通的查询,通过concat函数,可以将多个值连接起来返回。而想要将分组后产生的同一组的值连接起来就需要另一个函数group_concat。
group_concat([distinct] field1,field2,field3... [order by field [asc/desc]][separator 'separator'])
通过distinct可以对字段fields的值进行去重,order by可以对要连接的指定字段值进行排序,默认升序,separator用于指定同一分组中各条数据的分隔符。
concat_ws(separator,field1,field2...)
所有的字段都通过制定的分隔符separator进行分隔。如果分隔符为null,则返回结果为null。
#默认分隔符为“,”
SELECT `name`,GROUP_CONCAT(score) AS score FROM scores GROUP BY `name`;
#使用“-”作为分隔符
SELECT `name`,GROUP_CONCAT(score separator "-") AS score FROM scores GROUP BY `name`;
#对score进行排序
SELECT `name`,GROUP_CONCAT(score ORDER BY score separator "-") AS score FROM scores GROUP BY `name`;
#连接多个字段
SELECT `name`,GROUP_CONCAT(course,"-",score ORDER BY score separator "|") AS score FROM scores GROUP BY `name`;
#使用concat_ws函数
SELECT `name`,GROUP_CONCAT(concat_ws("-",course,score) ORDER BY score separator "|") AS score FROM scores GROUP BY `name`;
结果如下: