【问题标题】:MySQL Group_Concat Distinct By IdMySQL Group_Concat 按 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 函数的情况下执行此操作,但我需要分隔符。这可能不是一个好的答案,但我还是会发布它。

【问题讨论】:

  • 您可以对记录进行抽样并获得所需的结果吗?

标签: mysql sql distinct group-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。有一个很长的查询,并且无处可去。使用你的答案会有很多变化。 :)
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
相关资源
最近更新 更多