oracle中list_oracle listagg 拼接字符串过长

oracle中list_oracle listagg 拼接字符串过长语法有点难以看懂,个人理解listagg是listaggregate的缩写(错了勿喷),也就是列表总计,聚合的意思。官方文档解释为:LISTAGGordersdatawithineachgroupspecifiedintheORDERBYclauseandthenconcatenatesthevaluesofthemeasurecolumn….

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

语法

在这里插入图片描述
有点难以看懂,个人理解listagg是list aggregate的缩写(错了勿喷),也就是列表总计,聚合的意思。
官方文档解释为:

LISTAGG orders data within each group specified in the ORDER BY clause and then concatenates the values of the measure column.

大概意思就是listagg函数先在每个组里用order by子句排序之后,再拼接每个分组里特指的列值。
从上面的解释可以知道,listagg每个组进行操作并返回一个输出行。

注意:这里的组在没有group by子句的时候指的是整个结果集,partition by子句指的是结果集中分区。

参数解释

上图的参数有:

  • ALL:ALL关键字是可选的。
  • measure_expr :measure_expr是被操作的列,可以是任何表达式。被操作的列中的空值将被忽略。
  • delimiter:分隔符,用来分割被操作列的列值,就是拼接每个列值后面跟一个分隔符,最后一个列值除外,分隔符也是可选的,默认值为NULL。
  • listagg_overflow_clause:这个子句控制当返回值超过返回数据类型的最大长度时函数的行为。也是可选的。
  • order_by_clause:顾名思义,排序子句。决定被连接值的顺序,谁在前谁在后。
  • query_partition_clause:listagg根据query_partition_clause中的一个或多个表达式将查询结果集划分为多个区(partition)。即分区之后,再进行列值拼接,注意partition的字段没有进行去重,仅仅是分区后进行处理,不会改变行数。Parttion by 关键字是Oracle中分析函数的一部分,它和聚合函数不同的地方在于它能够返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的结果。

实例

聚合函数

SELECT LISTAGG(last_name, '; ')
         WITHIN GROUP (ORDER BY hire_date, last_name) "Emp_list",
       MIN(hire_date) "Earliest"
  FROM employees
  WHERE department_id = 30;

Emp_list                                                     Earliest
------------------------------------------------------------ ---------
Raphaely; Khoo; Tobias; Baida; Himuro; Colmenares            07-DEC-02
SELECT department_id "Dept.",
       LISTAGG(last_name, '; ') WITHIN GROUP (ORDER BY hire_date) "Employees"
  FROM employees
  GROUP BY department_id
  ORDER BY department_id;

Dept. Employees
------ ------------------------------------------------------------
    10 Whalen
    20 Hartstein; Fay
    30 Raphaely; Khoo; Tobias; Baida; Himuro; Colmenares
    40 Mavris
    50 Kaufling; Ladwig; Rajs; Sarchand; Bell; Mallin; Weiss; Davie
       s; Marlow; Bull; Everett; Fripp; Chung; Nayer; Dilly; Bissot
       ; Vollman; Stiles; Atkinson; Taylor; Seo; Fleaur; Matos; Pat
       el; Walsh; Feeney; Dellinger; McCain; Vargas; Gates; Rogers;
        Mikkilineni; Landry; Cabrio; Jones; Olson; OConnell; Sulliv
       an; Mourgos; Gee; Perkins; Grant; Geoni; Philtanker; Markle
    60 Austin; Hunold; Pataballa; Lorentz; Ernst
    70 Baer
. . .
SELECT department_id "Dept.",
       LISTAGG(last_name, '; ' ON OVERFLOW TRUNCATE '...')
               WITHIN GROUP (ORDER BY hire_date) "Employees"
  FROM employees
  GROUP BY department_id
  ORDER BY department_id;

Dept. Employees
------ ------------------------------------------------------------
    10 Whalen
    20 Hartstein; Fay
    30 Raphaely; Khoo; Tobias; Baida; Himuro; Colmenares
    40 Mavris
    50 Kaufling; Ladwig; Rajs; Sarchand; Bell; Mallin; Weiss; Davie
       s; Marlow; Bull; Everett; Fripp; Chung; Nayer; Dilly; Bissot
       ; Vollman; Stiles; Atkinson; Taylor; Seo; Fleaur; ... (23)
    70 Baer
. . .

分析函数

SELECT department_id "Dept", hire_date "Date", last_name "Name",
       LISTAGG(last_name, '; ') WITHIN GROUP (ORDER BY hire_date, last_name)
         OVER (PARTITION BY department_id) as "Emp_list"
  FROM employees
  WHERE hire_date < '01-SEP-2003'
  ORDER BY "Dept", "Date", "Name";

 Dept Date      Name            Emp_list
----- --------- --------------- ---------------------------------------------
   30 07-DEC-02 Raphaely        Raphaely; Khoo
   30 18-MAY-03 Khoo            Raphaely; Khoo
   40 07-JUN-02 Mavris          Mavris
   50 01-MAY-03 Kaufling        Kaufling; Ladwig
   50 14-JUL-03 Ladwig          Kaufling; Ladwig
   70 07-JUN-02 Baer            Baer
   90 13-JAN-01 De Haan         De Haan; King
   90 17-JUN-03 King            De Haan; King
  100 16-AUG-02 Faviet          Faviet; Greenberg
  100 17-AUG-02 Greenberg       Faviet; Greenberg
  110 07-JUN-02 Gietz           Gietz; Higgins
  110 07-JUN-02 Higgins         Gietz; Higgins

先进行”Dept”, “Date”, “Name”分组得到分组结果,再对结果集进行”department_id”分区,最后整合列值。

参考官方文档:https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/LISTAGG.html#GUID-B6E50D8E-F467-425B-9436-F7F8BF38D466

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196521.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python 获取时间戳_python将日期转换成时间戳

    python 获取时间戳_python将日期转换成时间戳1、获取秒级、毫秒级和微秒级时间戳importtimeimportdatetimet=time.time()#当前时间print(t)#原始时间数据print(int(t))#秒级时间戳print(int(round(t*1000)))#毫秒级时间戳print(int(round(t*1000000)))#微秒级时间戳结果:1634191096.03610181634191096163419109603616341910960361

    2022年9月3日
    4
  • c语言push_back_pushback是什么意思

    c语言push_back_pushback是什么意思push_back()函数的用法函数将一个新的元素加到vector的最后面,位置为当前最后一个元素的下一个元素push_back()在Vector最后添加一个元素(参数为要插入的值)//在vec尾部添加10vector<int>vec;vec.push_back(10);//在容器中添加10intnum=10;vector<int&gt…

    2022年10月28日
    0
  • FFmpeg从入门到精通笔记之一库介绍

    FFmpeg从入门到精通笔记之一库介绍FFmpeg:FastForwardMovingPictureExpertsGroup(mpeg:动态图像专家组)H.264:国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式.H.264是ITU-T以H.26x系列为名称命名的标准之一AVC(AdvanedVideoCoding):ISO/IECMPEG一方对H.264的称呼…

    2022年6月26日
    20
  • 集合类型python_集合 python

    集合类型python_集合 python集合集合的特点:是一种可迭代的、无序的、不能包含重复元素的数据结构去重b=[10,5,6,1,9,1]c=set(b)print(c)>>>{1,5

    2022年7月29日
    3
  • pycharm安装教程anaconda_幸福原来如此简单作文800字

    pycharm安装教程anaconda_幸福原来如此简单作文800字**Python、Ipython、Pycharm的安装过程原来如此简单**本人目前大一,大数据~专业(相同专业的小可爱们可以一起讨论、共同进步哈)前几周刚接触到python这门课,起初安装一头蒙,于是开始疯狂的从网上找各种资源来了解这门课程及安装过程,以下是我的安装过程,希望可以帮助到一些刚入门的小白。一、安装python(以python2.x版本为例,python3.x同理)pyth…

    2022年8月26日
    2
  • 俄罗斯介入叙利亚始末_俄罗斯为什么不帮助利比亚

    俄罗斯介入叙利亚始末_俄罗斯为什么不帮助利比亚导读对于美国国土安全部禁止该国所有国家机构使用俄罗斯卡巴斯基实验室软件的做法,俄罗斯政府于9月14日提出批评。卡巴斯基实验室否认美国政府提出的所有指控,并表示愿意与美国国土安全部合作。俄罗斯总统新闻秘书德米特里·佩斯科夫9月14日对记者表…

    2022年8月20日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号