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 区分的主要内容,如果未能解决你的问题,请参考以下文章