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 閱讀(914) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 司法| 酉阳| 聊城市| 开远市| 永川市| 佛山市| 界首市| 南昌市| 凌云县| 万荣县| 永康市| 鹤壁市| 扶绥县| 铜川市| 平凉市| 库尔勒市| 广德县| 大城县| 兴化市| 大石桥市| 扎兰屯市| 旌德县| 陇西县| 姚安县| 澄迈县| 瑞安市| 佛学| 监利县| 台州市| 永胜县| 南安市| 玛曲县| 农安县| 桐梓县| 临江市| 大田县| 新兴县| 丁青县| 龙井市| 汉寿县| 高台县|