sql:为啥使用'GROUP CONCAT'+'GROUP BY'时查询重复值?

Posted

技术标签:

【中文标题】sql:为啥使用\'GROUP CONCAT\'+\'GROUP BY\'时查询重复值?【英文标题】:sql: why does query repeat values when using 'GROUP CONCAT' + 'GROUP BY'?sql:为什么使用'GROUP CONCAT'+'GROUP BY'时查询重复值? 【发布时间】:2010-11-12 08:19:16 【问题描述】:

查询:

SELECT MemberId, a.MemberName, GROUP_CONCAT(FruitName) FROM a LEFT JOIN b ON 
a.MemberName = b.MemberName GROUP BY a.MemberName

表一

MemberID          MemberName              
--------------    ----------  
1                  Al                   
1                  Al       
3                  A2       

表 b

MemberName             FruitName
---------------        --------------
Al                     Apple
Al                     Mango
A2                     Cherry

上述查询的结果输出:

MemberId    MemberName  GROUP_CONCAT(FruitName)
3           A2          Cherry
1           A1          Apple,Apple,Mango,Mango

我使用的实际表格每张有 10 列,因此仅将所有内容存储在一个表格中并不是一种解决方法。也就是说,我怎样才能将查询更改为只为MemberName 返回'Apple,Mango'

【问题讨论】:

【参考方案1】:

在分组列中添加关键字DISTINCT:

GROUP_CONCAT(DISTINCT FruitName)

【讨论】:

【参考方案2】:

试试

GROUP_CONCAT(Distinct FruitName)

【讨论】:

【参考方案3】:
SELECT  MemberId, a.MemberName, GROUP_CONCAT(DISTINCT FruitName)
FROM    a
LEFT JOIN
        b
ON      a.MemberName = b.MemberName
GROUP BY
        a.MemberName

【讨论】:

以上是关于sql:为啥使用'GROUP CONCAT'+'GROUP BY'时查询重复值?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 HAVING 和 GROUP_CONCAT 在此查询中不能一起工作?

sql 分组查询额外值(group_concat 的使用)

使用 count 和 group_concat 编写 SQL 代码

如何在sql server中使用group_concat进行查询[重复]

如何在 sql [重复] 中使用 group_concat() 获取不同的值

Bigquery Standard Sql 等效于 Legacy Sql 中的 GROUP_CONCAT_UNQUOTED