MySQL 函数 —— GROUP_CONCAT

马钧
• 阅读 2598
GROUP_CONCAT 函数返回带有来自一个组的连接的非 NULL 值的字符串结果。该函数是一个增强的 Sybase SQL Anywhere 支持的基本 LIST() 函数。

语法结构

GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])

DISTINCT:去除重复值
expr [,expr ...]:一个或多个字段(或表达式)
ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]:根据字段或表达式进行排序,可多个
SEPARATOR str_val:分隔符(默认为英文逗号)

应用实例

查询某分类的所有子分类并用逗号连接子分类 ID

mysql>SELECT GROUP_CONCAT(cat_id) FROM goods_cat WHERE pid = 25

+-----------------------------+
| GROUP_CONCAT(cat_id)        |
+-----------------------------+
| 26,111,130,206,239,322,323  |
+-----------------------------+

查询某分类的所有子分类并用分号连接子分类 ID

mysql>SELECT GROUP_CONCAT(cat_id SEPARATOR ';') FROM goods_cat WHERE pid = 25

+-------------------------------------+
| GROUP_CONCAT(cat_id SEPARATOR ';')  |
+-------------------------------------+
| 26;111;130;206;239;322;323          |
+-------------------------------------+

查询某分类的所有子分类,根据 p_order ASC, cat_id DESC 排序后再连接

mysql>SELECT GROUP_CONCAT(cat_id ORDER BY p_order ASC, cat_id DESC) FROM goods_cat WHERE pid = 25

+----------------------------------------------------------+
| GROUP_CONCAT(cat_id ORDER BY p_order ASC, cat_id DESC)   |
+----------------------------------------------------------+
| 332,331,242,212,133,112,29,26,333,330,327,244,138,116    |
+----------------------------------------------------------+

结合 GROUP BY 查询

mysql>SELECT pid, GROUP_CONCAT(cat_id) FROM goods_cat GROUP BY pid

+-----------+-------------------------------------+
| parent_id | GROUP_CONCAT(cat_id)                |
+-----------+-------------------------------------+
|        22 | 35,166,191,209,233,252,256,257,258  |
|        25 | 26,111,130,206,239,322,323          |
|        26 | 29,51,65,66,70,75,238               |
|       323 | 332,333,334,335,336,337,338,339     |
+-----------+-------------------------------------+

注意:

最大长度(字符)限制

系统变量:group_concat_max_len

SET [SESSION | GLOBAL] group_concat_max_len = val;

val 必须是无符号整数

用了 GROUP_CONCAT 函数,SELECT 语句中的 LIMIT 语句起不了任何作用。

INT 类型陷阱

连接的字段为 INT 类型时,低版本或出现返回的结果不是逗号分隔的字符串,而是 byte[]

此时,需要用 CASTCONVERT 函数进行转换。


原文地址: https://shockerli.net/post/my...
更多文章请访问我的个人博客: https://shockerli.net
点赞
收藏
评论区
推荐文章
Karen110 Karen110
4年前
盘点JavaScript中Eval函数的使用方法
大家好,我是进阶学习者。一、前言内建函数eval函数允许执行一个代码字符串。语法:letresulteval(code);例:letcode'alert("Hello")';eval(code);//Hello运行结果:代码字符串可能会比较长,包含换行符、函数声明和变量等。eval的结果是最后一条语句的结果。例:let
Easter79 Easter79
3年前
sql:mysql:函数:TIMESTAMPDIFF函数实现TimeStamp字段相减,求得时间差
<divclass"htmledit\_views"id"content\_views"<p&nbsp;函数内指定是minute,则最终结果value值的单位是分钟,如果函数内指定为hours,则最终结果value值单位为小时。</p<preclass"has"name"code"<codeclass"hljssql"<
Wesley13 Wesley13
3年前
SQL中的函数
概括:函数是由一个或多个TSQL语句组成的子程序,是一组可用于封闭实现一定功能的程序代码,函数使代码便于重复使用。类别:1、聚合函数聚合函数对一个组值执行计算,并返回单个值。除了COUNT以外,聚合函数都会忽略空置。聚合函数经常与SELECT语句的GROUPBY字句一起使用。常用的聚合函数包括AVC、COUNT、MA
菜园前端 菜园前端
2年前
什么是高阶函数?
原文链接:什么是高阶函数?有两种情况都可以被定义为高阶函数,第一种是把函数作为参数传递给另外一个函数,第二种是把函数作为另一个函数的返回结果。就像我们平时调用函数,一般都是传递值类型或者对象和数组等参数,或者是函数返回结果是值类型或者是对象和数组,高阶函数
Wesley13 Wesley13
3年前
mysql中时间比较的实现
MySql中时间比较的实现unix\_timestamp()unix\_timestamp函数可以接受一个参数,也可以不使用参数。它的返回值是一个无符号的整数。不使用参数,它返回自1970年1月1日0时0分0秒到现在所经过的秒数,如果使用参数,参数的类型为时间类型或者时间类型的字符串表示,则是从1970010100:00:0
Stella981 Stella981
3年前
HIVE 时间操作函数
日期函数UNIX时间戳转日期函数: from\_unixtime语法:   from\_unixtime(bigint unixtime\, string format\)返回值: string说明: 转化UNIX时间戳(从19700101 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive   selec
Wesley13 Wesley13
3年前
mysql常用函数小结
mysql常用函数小结:1.concat:连接多个变量为一个变量1.连接变量的值不能为空,如果有一个变量的值为null,连接的结果则为nullSELECTCONCAT('111','2222',null);//结果nullSELECTCONCAT('111
Wesley13 Wesley13
3年前
mysql——GROUP BY和HAVING
GROUPBY语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。select子句中的列名必须为分组列或列函数,列函数对于groupby子句定义的每个组返回一个结果。某个员工信息表结构和数据如下:  id  name  dept  salary  edlevel     hiredate   1  张
Wesley13 Wesley13
3年前
MYSQL表分区支持的函数清单
Mysql5.1支持的partition函数1.数学函数ABS(x)    返回x的绝对值CEILING(x)/CEIL(x)返回大于或等于x的最小整数FLOOR(x)    返回小于或等于x的最大整数MOD(x,y)    返回x除以y以后的余数2.日期时间函数EXTRACT(typeFROMd)    从
Wesley13 Wesley13
3年前
PHP中的NOW()函数
是否有一个PHP函数以与MySQL函数NOW()相同的格式返回日期和时间?我知道如何使用date()做到这一点,但是我问是否有一个仅用于此的函数。例如,返回:2009120100:00:001楼使用此功能:functiongetDatetimeNow(){
Stella981 Stella981
3年前
Python中函数装饰器及练习
1)装饰器的理解:1、作用:在不改变原函数的基础上,给函数增加功能   2、返回值:把一个函数当作参数,返回一个替代版的函数3、本质:返回函数的函数4、应用场景:计时器、记录日志、用户登陆认证、函数参数认证2)无参函数装饰器  实例:被装饰的函数没有参数     执行结果为: