MySQL GROUP_CONCAT 和 ORDER BY结合使用
在MySQL中,可以通过GROUP_CONCAT函数实现将指定列的多个值合并成一个字符串,但是默认情况下合并后的字符串是按照插入的顺序排列的。如果我们希望按照某个列的值进行排序,就需要使用ORDER BY。
阅读更多:MySQL 教程
语法
GROUP_CONCAT函数的语法如下:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
其中,expr指定需要合并的列或者表达式。DISTINCT可选,表示在合并的时候去重。ORDER BY可选,按指定列或表达式的值进行排序。SEPARATOR可选,用于指定分隔符,默认为逗号。
示例
我们使用下面的表格作为示例,包含了学生ID和学习的科目:
| stuid | subject |
|---|---|
| 1 | Math |
| 1 | English |
| 2 | Math |
| 2 | Chinese |
| 2 | Physics |
假设我们需要按学生ID对科目进行合并,同时按科目名称进行排序,则可以使用如下的SQL:
SELECT stuid, GROUP_CONCAT(subject
ORDER BY subject ASC
SEPARATOR ';') AS subjects
FROM students
GROUP BY stuid;
执行上述SQL语句后,得到的结果如下:
| stuid | subjects |
|---|---|
| 1 | English;Math |
| 2 | Chinese;Math;Physics |
总结
MySQL中的GROUP_CONCAT函数可以将指定列的多个值合并为一个字符串,通过ORDER BY可以按照指定的列或表达式的值进行排序。在实际应用中,这个函数可以被用于将多个数据进行统计合并,然后通过排序操作得到更加有用的结果。
极客笔记