MySQL 如何使用GROUP_CONCAT DISTINCT函数在MySQL中合并多列并排除重复值
在MySQL中,GROUP_CONCAT函数可以将一列中的所有值合并成一个字符串,但是如果需要在合并多列时排除重复值,可以使用GROUP_CONCAT DISTINCT函数。本文将介绍如何使用GROUP_CONCAT DISTINCT函数在MySQL中合并多列并排除重复值。
阅读更多:MySQL 教程
语法
GROUP_CONCAT DISTINCT语法如下:
GROUP_CONCAT(DISTINCT column1, column2, ...)
示例
我们假设有以下名为”students”的表格:
| id | name | score | subject |
|---|---|---|---|
| 1 | Tom | 90 | Math |
| 2 | Jenny | 85 | English |
| 3 | Tom | 80 | Science |
| 4 | Mike | 95 | Math |
| 5 | Mike | 90 | English |
如果我们想要以“name”和“subject”为关键字将每个学生的分数合并为一个字符串。可以使用以下SQL查询:
SELECT name, GROUP_CONCAT(DISTINCT score ORDER BY score DESC SEPARATOR ',') AS 'score_list', GROUP_CONCAT(DISTINCT subject ORDER BY subject) AS 'subject_list' FROM students GROUP BY name;
这将得到以下结果:
| name | score_list | subject_list |
|---|---|---|
| Tom | 90,80 | Math,Science |
| Jenny | 85 | English |
| Mike | 95,90 | Math,English |
在以上示例中,我们首先选择了想要合并的两列,分别是“score”和“subject”。然后,为了使结果更容易理解,我们将“score_list”列按分数降序排列,使用逗号分隔符分隔每个值。”subject_list”将按字母顺序排列,对于重复值,只保留一个。 最后,我们使用“GROUP BY”指令按“name”列分组,以便我们可以将结果按照每个学生名称分组。
总结
通过在GROUP_CONCAT函数中添加DISTINCT关键字,我们可以合并多列并同时排除重复值。这是一个非常有用的工具,可以用于处理数据。上述示例只是开始,GROUP_CONCAT语句有无限变化的可能性。这可以帮助我们轻松地处理许多数据场景,比如处理学生成绩,或去重,在合并字符串时更加便捷。
极客笔记