MySQL GROUP_CONCAT()函数的排序方法

1. 用法

GROUP_CONCAT() 函数的参数是可以直接使用 ORDER BY 排序的.

2. 例子

1.  表中数据如下:

id  username  score

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

2. 需求如下:

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

关键字分析可知:

[多个分数显示在一起]: 必然用到组合 [或者说拼接] 在一起 [当然后端通过代码也可以实现 [如:php code],不过会多些代码] ,在性能上,还需要结合具体情况确定] 即关键字concat

[每个人]: 则需要用分组,即用到GROUP BY

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

[从高到底排序]: ORDER BY DESC[默认排序规则就是你能想到的排序的规则, 如果结果不是, 再去确认]

3. 解答

SQL如下:

SELECT username, GROUP_CONCAT(score ORDER BY score desc) as new_score

FROM score

GROUP BY username;

4. 查询的结果如下:

username new_score

张三            90,70,60
李四            85,80
王五            80

由上可看到:

多个分数在一起,按照指定的分组[即username],同时排序多个分数,从左往右按照从高到死排序

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 

后续补充

...

  • 18
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
MySQL中的`group_concat`函数是一种非常实用的函数,它可以将同一个分组下的行拼接在一起。该函数的语法如下:`GROUP_CONCAT([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’])`。 使用`group_concat`函数的技巧如下: 1. 建表和插入数据:首先需要创建一个表,并插入测试数据。 2. 基本查询:可以使用`SELECT * FROM table_name`语句来查询表中的数据。 3. 使用`group_concat`函数:可以使用`SELECT id, group_concat(age) FROM table_name GROUP BY id`语句来根据id分组,将age字段的值拼接成一行,使用逗号进行分隔。 4. 自定义分隔符:如果想要使用自定义的分隔符,可以在`group_concat`函数中使用`separator`关键字,如`SELECT id, group_concat(age separator ';') FROM table_name GROUP BY id`,这样就可以将age字段的值拼接成一行,使用分号进行分隔。 所以,MySQL中的`group_concat`函数可以用来将同一分组下的行拼接在一起,并可以自定义分隔符。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [mysql GROUP_CONCAT函数详解](https://blog.csdn.net/liqinglonguo/article/details/131097681)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值