SQL关于分组合并字段解决方案

之前遇到分组后合并某字段得问题,我都会自己去写个函数去实现。直至今天我才知道,原来各个数据库都提供了相关的函数,只是我不知道罢了。
mysql提供的函数功能最为强大,oracle和postgresql提供的函数只能实现单个字段合并

1.mysql:group_concat函数,demo如下:
表数据:

SQL:SELECT group_concat(name,',',remark order by id desc separator ';'FROM test group by age;
运行结果:


2.oracle:wmsys.wm_concat函数,功能比较简单,只能实现单字段间的合并,demo如下:
表数据:


SQL:
SELECT DISTINCT
    wmsys.wm_concat (NAME) OVER (
        PARTITION BY AGE
        ORDER BY
            (SELECT 1 FROM dual)
    )
FROM
    (
        SELECT
            *
        FROM
            T_TEST
        ORDER BY
            ID DESC
    ) T
结果:


3.Postgresql:array_to_string以及string_agg两个函数都能实现,推荐string_agg,demo如下:
表数据:

SQL:
     SELECT id,array_to_string(ARRAY(SELECT unnest(array_agg(name)) order by 1),';'FROM t_kenyon GROUP BY id ORDER BY id;

     SELECT id,string_agg(name,';'FROM t_kenyon GROUP BY id ORDER BY id;
结果:

posted on 2014-12-31 15:49 Mr.lu 阅读(892) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(2)

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜