zoukankan      html  css  js  c++  java
  • 010.PGSQL-炸裂函数regexp_split_to_table、分组连接string_agg

    1.炸裂函数regexp_split_to_table

    以逗号切分,转为数据集

    select regexp_split_to_table('飞机,火车,地铁,汽车',  ',' )

     

    select regexp_split_to_array('飞机,火车,地铁,汽车', ',' )  转为数组

     

    select (regexp_split_to_array('飞机,火车,地铁,汽车',  ',' ))[1]   取数组的第二个元素

    select regexp_split_to_table('F:QH本部文件一套表部署相关 est.sh','\')    正则匹配

     

    2.炸裂函数的反向操作

    分组连接字符串形式string_agg  、分组连接数组形式array_agg(配合array_to_string使用)

    模拟数据

     

    CREATE TABLE "dbscheme"."test0001" (
      "nameid" varchar(20) COLLATE "pg_catalog"."default",
        "traffic" varchar(200) COLLATE "pg_catalog"."default",
      "update_time" timestamp(6)  
    );
    
        insert into dbscheme.test0001
             (
            nameid,
            traffic,
            update_time
            ) values
            ('ll','飞机',CURRENT_date),
            ('ll','火车',CURRENT_date-3),
            ('ll','地铁',CURRENT_date),
            ('kk','汽车',CURRENT_date-3),
            ('hh','公交',CURRENT_date-1),
            ('kk','自驾',CURRENT_date-2),
            ('kk','汽车',CURRENT_date-3);
            
    select * from dbscheme.test0001;

     

    array_agg(expression)
    把表达式变成一个数组 一般配合 array_to_string() 函数使用
    string_agg(expression, delimiter)
    直接把一个表达式变成字符串

    1. 相同id 的连接到一起,逗号分隔

    字符串

    select nameid, string_agg(traffic,',') , update_time from dbscheme.test0001 group by nameid,update_time order by  nameid,update_time;

     

     

    select nameid, string_agg(traffic,',') from dbscheme.test0001 group by nameid order by nameid ;

     

    去重

    select nameid, string_agg(distinct traffic,',') from dbscheme.test0001 group by nameid order by nameid ;

     排序

    select nameid, string_agg(traffic,',' order by traffic)   from dbscheme.test0001 group by nameid  order by  nameid ;

     

     

    2.数组

    select nameid, array_agg(traffic ) from dbscheme.test0001 group by nameid order by nameid ;

    数组去重 、排序

    select nameid, array_agg(distinct traffic order by traffic desc ) from dbscheme.test0001 group by nameid order by nameid ;

     

     

    按名称分组 ,按时间排序 

    select nameid, array_agg(traffic order by update_time asc) from dbscheme.test0001 group by nameid;

     

    按名称分组 ,按时间排序 ,取数组的第一个值

    select nameid, (array_agg(traffic order by update_time asc))[1] from dbscheme.test0001 group by nameid;

     

     3.数组转字符串

    select nameid, array_to_string(array_agg(traffic),',') from dbscheme.test0001 group by nameid order by nameid ;

     

     

     

  • 相关阅读:
    Linux编译工具:gcc入门
    Socket编程实践(3) 多连接服务器实现与简单P2P聊天程序例程
    Socket编程实践(2) Socket API 与 简单例程
    Socket编程实践(1) 基本概念
    数据结构图文解析之:二分查找及与其相关的几个问题解析
    数据结构图文解析之:直接插入排序及其优化(二分插入排序)解析及C++实现
    [CG编程] 基本光照模型的实现与拓展以及常见光照模型解析
    郑重声明!本博客内容皆为原创且首发于博客园
    【原创】面试官:谈谈你对mysql联合索引的认识?
    【原创】为什么Mongodb索引用B树,而Mysql用B+树?
  • 原文地址:https://www.cnblogs.com/star521/p/13469628.html
Copyright © 2011-2022 走看看