MySQL group_concat()函数的排序方法

1. 用法

group_concat()函数的参数是可以直接使用order by排序的。

2. 例子

表中数据如下:

id  username  score

1    张三    90
2    李四    85
3    王五    80
4    张三    70
5    李四    80
6    张三    60

 

需求如下:

我们要查看每个人的 [多个] 分数,将该人对应的 [多个分数显示在一起] ,分数要 [从高到底] 排序

关键字分析可知:

多个分数显示在一起 必然用到组合 [或者说拼接] 在一起 [当然后端通过代码也可以实现 [如:php code],不过会多些代码] ,

在性能上,还需要结合具体情况确定] 即关键字concat

每个人】:则需要用分组,即用到group by

【如果熟悉mysql,就会想到使用group_concat(), 如果不熟悉,也请记住,mysql作为这么流行的开源框架,你能想到的功能,基本都实现了,而且mysql考虑到了几乎所有的开发者需求,所以去查文档,Google,或者直接百度,总会有提示,然后去实践验证即可】

从高到底排序】:order by  desc  [默认排序规则就是你能想到的排序的规则,如果结果不是,再去确认]

 

sql语句:

select username, GROUP_CONCAT(score ORDER BY score desc) as myScore from score GROUP BY username;

 

查询的结果如下:

username myScore

张三    90,70,60    //可以看到多个分数在一起,按照指定的分组【即username】,同时排序多个分数,从左往右按照从高到死排序
李四    85,80
王五    80

3. 备注/补充

group_concat()是要结合group by使用的,如果没有group by,查询的结果只会有一条记录,同时即第一条记录,并且把所有group_concat()中字段值组合在一起【有时候也可能会有这样的需求,所以还是结合具体需求来做,程序没有错误的写法,只有不适用的场景需求】

 

补充:20190914

1、使用语法及特点:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col ...]]
[SEPARATOR str_val])
在 MySQL 中,你可以得到表达式结合体的连结值。通过使用 DISTINCT 可以排除重复值。如果希望对结果中的值进行排序,可以使用 ORDER BY 子句。
SEPARATOR 是一个字符串值,它被用于插入到结果值中。缺省为一个逗号 (","),可以通过指定 SEPARATOR "" 完全地移除这个分隔符。
可以通过变量 group_concat_max_len 设置一个最大的长度。在运行时执行的句法如下: SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;
如果最大长度被设置,结果值被剪切到这个最大长度。如果分组的字符过长,可以对系统参数进行设置:SET @@global.group_concat_max_len=40000;

 

例子:

SELECT locus,GROUP_CONCAT(distinct id ORDER BY id DESC SEPARATOR '_') FROM info WHERE locus IN('AB086827','AF040764') GROUP BY locus;的返回结果为
+----------+----------------------------------------------------------+
| locus    | GROUP_CONCAT(distinct id ORDER BY id DESC SEPARATOR '_') |
+----------+----------------------------------------------------------+
| AB086827 | 2_1                                                      |
| AF040764 | 24_23                                                    |
+----------+----------------------------------------------------------+

 

4. 参考

https://www.cnblogs.com/pcheng/p/5943156.html

https://www.cnblogs.com/fuhengheng/p/8042683.html 

 

后续补充

...

你可能感兴趣的:(MYSQL)