MySQL SELECT 语句按 id 分组结果?

Posted

技术标签:

【中文标题】MySQL SELECT 语句按 id 分组结果?【英文标题】:MySQL SELECT statement that groups results by id? 【发布时间】:2011-02-12 15:26:53 【问题描述】:

我正在尝试创建一个 mysql SELECT 语句,该语句将从表中选择一堆行,并按行的 id 对结果进行分组(多行将具有相同的 id)。

这是我正在尝试做的一个示例。假设我有下表:

id     |     name  
1      |     Art  
1      |     Arnold  
1      |     Anatoly  
2      |     Beatrice  
2      |     Bertha  
2      |     Betty  
3      |     Constantine  
3      |     Cramer  

我想让 MySQL 返回按 id 分组的数据,如下所示:

[1] => Art, Arnold, Anatoly
[2] => Beatrice, Bertha, Betty
[3] => Constantine, Cramer

我知道我可以做一个简单的 SQL 选择,然后在 php 中循环遍历结果,但如果可能的话,我想让 MySQL 处理分组。

【问题讨论】:

【参考方案1】:

一种可能的解决方案是使用 MySQL 的 GROUP_CONCAT(expr) 函数。

SELECT
  GROUP_CONCAT(name)
FROM
  foo
GROUP BY
  id

但请记住:

结果被截断为group_concat_max_len系统变量给出的最大长度,默认值为1024。

【讨论】:

@MikeB,它每天都困扰着我:我出生于 10/24。 :P 感谢@VolkerK 的回复,但我肯定会遇到最大长度问题,因为我要处理数千行 =) @user 为什么需要这么多数据?你打算如何处理包含数千个逗号分隔名称的行? @user259878:在当前会话中可以通过SET @@group_concat_max_len:= 1024*100;更改变量,最大为4294967295。但是上校弹片的问题仍然相关。

以上是关于MySQL SELECT 语句按 id 分组结果?的主要内容,如果未能解决你的问题,请参考以下文章

Linux——MySQL高阶语句杂而精

Linux——MySQL高阶语句杂而精

关于MYSQL group by 分组按时间取最大值的实现方法!

MySQL Select 语句 - 两个表,按其他表的计数对一个表进行排序

订购和分组mysql

mysql按字段分组并获取每个分组按照某个字段排序的前三条