如何将SQL distinct查询结果连接成一个字符串?

3
如何从一列中获取不同的值并将它们连接成一个字符串?谢谢。
例如,我有这样一列:
fruit_name
------
apple
apple
apple
banana
orange
orange
.
.
.

我希望创建一个类似于苹果,香蕉,橙子...的结果。

这是我尝试过的查询语句,但它只会给出一个苹果,苹果,苹果,香蕉...的结果。

SELECT LISTAGG(fruit_name,', ') WITHIN GROUP (ORDER BY fruit_name) "fruit_List" FROM FRUIT_TABLE;

我不知道如何使结果与众不同。

1
LISTAGG 在 MySQL 中不可用。您确定要针对 MySQL 寻找解决方案吗? - Giorgos Betsos
@Natsuki_Kato 你真的在使用MySQL吗?还是使用SQL Server或者Oracle(如果是后者,答案会更长)? - Tim Biegeleisen
4个回答

1

您可以使用MySQL的GROUP_CONCAT()函数来解决您的问题:

SELECT GROUP_CONCAT(t.fn)
FROM
(
    SELECT fruit_name fn
    FROM FRUIT_TABLE
    GROUP BY fruit_name
) t

GROUP_CONCAT 中的默认分隔符是逗号,这也是您在原始问题中指定的分隔符。

更新:

我要感谢 @cars10 指出了每个人最初都搞错了这一点。


我的答案先发布了。只是想说一下 :-) - Tim Biegeleisen
我的初始解决方案与你的基本相同,但不幸的是,两者都是错误的,请参见此处:http://sqlfiddle.com/#!9/bfbf4/1 - Carsten Massmann

1

尝试这个查询

SELECT GROUP_CONCAT(DISTINCT fruit_name) FROM FRUIT_TABLE ORDER BY fruit_name;

1

由于mysql中没有LISTAGG函数,您可以使用以下查询,使用GROUP_CONCAT

SELECT GROUP_CONCAT(DISTINCT fruit_name ORDER BY fruit_name ASC SEPARATOR ',') as fruit_List
FROM FRUIT_TABLE

GROUP_CONCAT 包含 DISTINCTORDER BY 属性


0

编辑:(我的第一个版本完全错误!)

select group_concat(fn) fruit_list
from (select fruit_name fn 
         from fruit_table 
         group by fruit_name) fruits

现在它可以工作了,看这里:http://sqlfiddle.com/#!9/bfbf4/2 但是Nikhil Batra的解决方案显然是更好的选择!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接