groupconcat怎么排序(group_concat函数详解)

http://www.itjxue.com  2023-02-08 19:50  来源:未知  点击次数: 

mysql 取分组的前n条记录,排序是复合排序

一条SQL无法做到,要显示指定的行数只能用limit,而limit又不能作用于子查询。

Mysql如何实现合并多行字符串?

mysql如何实现多行查询结果合并成一行,mysql如何实现多行查询结果合并成一行网站简介信息

利用函数:group_concat(),实现一个ID对应多个名称时,原本为多行数据,把名称合并成一行。

其完整语法:

GROUP_CONCAT(expr)

该函数返回带有来自一个组的连接的非NULL值的字符串结果。其完整的语法如下所示:

GROUP_CONCAT([DISTINCT] expr [,expr ...]

[ORDER BY {unsigned_integer | col_name | expr}

[ASC | DESC] [,col_name ...]]

[SEPARATOR str_val])

mysql SELECT student_name,

- GROUP_CONCAT(test_score)

- FROM student

- GROUP BY student_name;

Or:

mysql SELECT student_name,

- GROUP_CONCAT(DISTINCT test_score

- ORDER BY test_score DESC SEPARATOR ' ')

- FROM student

- GROUP BY student_name;

在MySQL中,你可以获取表达式组合的连接值。你可以使用DISTINCT删去重复值。假若你希望多结果值进行排序,则应该使用 ORDER BY子句。若要按相反顺序排列,将 DESC (递减) 关键词添加到你要用ORDER BY 子句进行排序的列名称中。默认顺序为升序;可使用ASC将其明确指定。 SEPARATOR 后面跟随应该被插入结果的值中间的字符串值。默认为逗号 (‘,')。通过指定SEPARATOR '' ,你可以删除所有分隔符。

使用group_concat_max_len系统变量,你可以设置允许的最大长度。 程序中进行这项操作的语法如下,其中 val 是一个无符号整数:

SET [SESSION | GLOBAL] group_concat_max_len = val;

MySQL分组、排序

上一篇聚合函数末尾处使用了GROUP BY,但没有做具体的介绍,这一篇就主要介绍一下GROUP BY的使用方法。顺便介绍一下对分组查询的过滤关键词HAVING的用法。

在MySQL中,GROUP BY关键词可以根据一个或多个字段对查询结果进行分组,类似于Excel中的数据透视表。可以单独使用,但一般情况下都是结合聚合函数来使用的。

语法格式如下:

下面演示都是基于这一张简单的省份对应大区的表格。

【单独使用GROUP BY】

单独使用GROUP BY关键字时,查询结果会只显示每个分组的第一条记录。

根据省份表里面的大区进行聚合,查询全国共分成了几个大区,SQL语句如下↓

【GROUP BY结合聚合函数】

5个聚合函数上一篇已经详细介绍了用法,GROUP BY和聚合函数结合使用也是最频繁的,下面就继续使用省份表来求每个大区有多少个省份,对应的聚合函数就是COUNT函数,SQL语句如下↓

【GROUP BY结合GROUP_CONCAT】

这还是一个很有用的功能,GROUP_CONCAT() 函数会把每个分组的字段值都合并成一行显示出来。

下面继续使用省份表,把每个大区对应的省份放在一行展示,用分号分开,SQL语句如下↓

【GROUP BY结合WITH ROLLUP】

WITH POLLUP关键词用来在所有记录的最后加上一条记录,这条记录是上面所有记录的总和,SQL语句如下↓

【GROUP BY结合HAVING】

在MySQL中,可以使用HAVING关键字对分组后的数据进行过滤。

使用 HAVING 关键字的语法格式如下:

HAVING关键词和WHERE关键词都可以用来过滤数据,且HAVING支持WHERE关键词中所有的操作符和语法。但是WHERE和HAVING关键字也存在以下几点差异:

下面筛选一下省份数量在7个及以上的大区,SQL语句如下↓

【GROUP BY结合ORDER BY】

聚合后的数据,一半情况下也是需要进行排序的,通过ORDER BY对聚合查询结果进行排序,对省份数量按从大到小进行排序,SQL语句如下↓

End

◆ PowerBI开场白

◆ Python高德地图可视化

◆ Python不规则条形图

MySQL 的 GROUP_CONCAT 函数详解

GROUP_CONCAT(expr) 函数会从 expr 中连接所有非 NULL 的字符串。如果没有非 NULL 的字符串,那么它就会返回 NULL。语法如下:

它在递归查询中用的比较多,但要使用好它并不容易。所以让我们一起来看看吧:

假设有这样一张领接表模型的树型表 t_region,它的基本结构如下:

【1】以逗号最为默认的连接字符

【2】可以使用 DISTINCT 过滤重复的值,也可以加入 ORDER BY 对值进行排序,还可以使用 SEPARATOR 指定分隔符:

这里的返回值以过滤了重复值,并且倒序排序,还使用了空格作为分隔符。

GROUP_CONCAT() 是有最大长度限制的,默认值是 1024。

可以通过 group_concat_max_len 参数进行动态设置。参数范围可以是 Global 或 Session。

设置语法如下:

值是无符号整型,最大值与版本位数有关:

如果 group_concat_max_len 的值被设置为小等于 512,那么 GROUP_CONCAT 的返回值类型是 VARCHAR 或 VARBINARY;否则是 TEXT 或 BLOB。

实际上,group_concat_max_len 的值可以设的更大,但会受到参数max_allowed_packet 的限制。

很多人不知道这一点,因为它只有在数据量较大的情况下才会出现。

【1】使用默认值的情况:

可以看出,当总长度达到 1024 后,后面的记录就被截断掉咯。

【2】group_concat_max_len 设置为最大值:

这样设置之后,一般情况下,GROUP_CONCAT 就不会再出现字符串被截断的情况啦O(∩_∩)O~

sql怎么对列重新排序

给你举个例子:

a,b两个字段:

1,3

4,3

1,4

2,6

对它们排序:

order

by

a,b

结果:

1,3

1,4

2,6

4,3

解释:

先按a

字段排序,得1,1,2,4

如果出现a字段相同的情形,按b字段排序得到:1,3;1,4;

b字段只是在当a字段相同的时候才用到。

同理group

by中也是这个逻辑。

这个逻辑所有数据库中通用。

(责任编辑:IT教学网)

更多
上一篇:没有了

推荐java认证文章