zoukankan      html  css  js  c++  java
  • oracle中 listagg() WITHIN GROUP () 行转列函数的使用

    listagg() :   Oracle的列转行函数(1oracle11.2 以上版本.)

    语法: 

    listagg(id, ',') within group(order by serno)

    listagg(列名,' 分割符号') within group(order by 列值被拼接的顺序)

    1.使用条件查询 查询部门为20的员工列

      2.使用  listagg() WITHIN GROUP ()  将多行合并成一行(比较常用)

     3. 使用 listagg() within GROUP () over  将多行记录在一行显示(没有遇到过这种使用场景)

     二、同 wm_concat() 函数的区别:

    使用 wm_concat 函数,记得加上to_char. 不然会展现成 CLOB 字段.

    个人建议: 11g 版本后使用 listagg 函数. 之前版本使用 wm_concat 函数.

    三、group by和partition by 的区别

    group by 后的列必须是查询的分组全部列.

    partition by 查出的结果集是重复的,需要使用 distinct 进行显式去重.

    对于查询结果非常复杂的业务场景,个人感觉使用 PARTITION BY 会更灵活一些;GROUP BY 由于其查询结果列必须出现在 GROUP BY 条件里边而显得有些臃肿,不够优雅。partition by 可以理解为以什么来分区.

    LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX),

    总结:LISTAGG()把它当作SUM()函数来使用就可以了。

  • 相关阅读:
    寒假学习笔记12
    寒假学习笔记11
    寒假学习笔记10
    寒假学习笔记09
    JSoup简单测试
    App开发环境_Eclipse_20160927
    App开发环境_Eclipse_20160925
    ZC_源码编译真机烧写_20160424
    ZC_源码编译真机烧写_20160423
    sdk下载
  • 原文地址:https://www.cnblogs.com/mxh168/p/13962415.html
Copyright © 2011-2022 走看看