groupconcat怎么排序(group_concat函数详解)
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中也是这个逻辑。
这个逻辑所有数据库中通用。