MySQL Group_Concat 按 ID 区分

Posted

技术标签:

【中文标题】MySQL Group_Concat 按 ID 区分【英文标题】:MySQL Group_Concat Distinct By Id 【发布时间】:2012-08-29 17:26:56 【问题描述】:

是否可以group_concat 不同的 Id 记录:

GROUP_CONCAT(Column2 BY DISTINCT Column1)

我需要通过来自column1 的不同值来获取来自column2 的值。因为第 2 列中有重复值,所以我不能在 column2 上使用 distinct。

对此有什么想法吗?谢谢!

编辑 1

示例表记录:

ID  Value
1   A
1   A
2   B
3   B
4   C
4   C

使用我想要的GROUP_CONCAT [GROUP_CONCAT(Value BY DISTINCT Id)],我会有一个输出:

A, B, B, C

编辑 2

不知何故让我的group_concat 工作:

GROUP_CONCAT(DISTINCT CONCAT(Id, '|', Value))

这将通过不同的 id 显示连接的值,只需要在某处摆脱 Id。您可以在没有 concat 函数的情况下执行此操作,但我需要分隔符。这可能不是一个好的答案,但我还是会发布它。

【问题讨论】:

您可以对记录进行抽样并获得所需的结果吗? 【参考方案1】:

试试这个,(最简单的方法

SELECT GROUP_CONCAT(VALUE)
FROM
(
    SELECT DISTINCT ID, VALUE
    FROM TableName
) a

SQLFiddle Demo

【讨论】:

谢谢约翰!所以我的问题上没有GROUP_CONCAT 的功能?我有一个很长的查询,我不能在子查询中使用 distinct。 @KaeL 不确定回答您的问题,但我真的认为您需要创建一个单独的查询来获取不同的行,然后将其与当前行连接。 我明白了,非常感谢。我会尝试使用单独的查询,我有点担心性能,涉及非常大的表。 如果您的表上有正确的索引,那么您不必担心太多。如果您有子查询,请不要担心。 “必须这样做才能达到你的结果。” 感谢约翰提供的信息,我的表格已编入索引。我刚刚添加了一些调整以使我的group_concat 工作。我会在我的问题中添加我的答案,所以我可以接受你的答案,因为它帮助我思考了很多。 :)【参考方案2】:

GROUP_CONCAT函数支持DISTINCT表达式。

SELECT id, GROUP_CONCAT(DISTINCT value) FROM table_name GROUP BY id

【讨论】:

我会检查一下@xdazz,稍后再回复。谢谢! 这就是答案。【参考方案3】:

这应该可行:

SELECT GROUP_CONCAT(value) FROM (SELECT id, value FROM table GROUP BY id, value) AS d

【讨论】:

感谢 Gavin,但我在想是否有办法在 group_concat 内的另一列上使用 distinct。有一个很长的查询,并且无处可去。使用你的答案会有很多变化。 :)

以上是关于MySQL Group_Concat 按 ID 区分的主要内容,如果未能解决你的问题,请参考以下文章

向 mySQL GROUP_CONCAT 语句添加内连接

Mysql下GROUP_CONCAT使用

MySQL GROUP_CONCAT()的使用

使用 MySQL 在不同字段上的多个 GROUP_CONCAT

MYSQL group_concat

MySQL:GROUP_CONCAT 结果的条件?