首页 > 数据库 >PostgreSql的聚合函数--string_agg

PostgreSql的聚合函数--string_agg

时间:2023-06-22 20:35:03浏览次数:38  
标签:ename PostgreSql string -- agg 20 deptno 函数

聚合函数

顾名思义,聚合函数就是类似于min(),max(),sum()等函数,当然这些都是SQL标准的函数,应该都是比较熟悉,也比较常见。这边不对这些常见的函数进行介绍,主要涉及的是PostgreSql自带的一些特色聚合函数进行介绍,自己学习,也与大家共享。

主要介绍的聚合函数

String_agg,xmlagg,array_agg三者的道理是一样的只是合并的值的数据类型不同而已,这边主要介绍String_agg,这个也是最常用的。

String_agg:有两个参数一个是需要合并的字段名称或者字面量,还有就是合并后以何种分隔符,即:string_agg(expression, delimiter)。

假如表emp中的数据分布是这样的:

"empno" "ename" "job" "mgr" "hiredate" "sal" "comm" "deptno"

"7499" "ALLEN" "SALESMAN" "7698" "1981/2/20" "1600" "300" "30"

"7566" "JONES" "MANAGER" "7839" "1981/4/2" "2975" "20"

"7654" "MARTIN" "SALESMAN" "7698" "1981/9/28" "1250" "1400" "30"

其中7499和7654是同一个deptno的,为30,另外一个7566的deptno为20。

1、 现在需要将同一个部门的员工的姓名合并起来

Select string_agg(ename,’,’) from empgroup by deptno;

在查询的字段上添加deptno

Select deptno,string_agg(ename,’,’) fromemp group by deptno;

结果为:

Deptno ename_agg

20 JONES

30 ALLEN,MARTIN

那么当你需要ename这个字段的不是按照现在的顺序合并该怎么办呢?

那我们就需要由一个排序的操作,如:

Select deptno,string_agg(ename,’,’ orderby ename desc) from emp group by deptno;

结果为:

Deptno ename_agg

20 JONES

30 MARTIN,ALLEN

需要注意的是:

1、 order by语句需要写在delimiter的后面这是PostgreSql的语句;

2、 order by后面的字段不受整个语句的group by语句后面的字段的限制,可以使ename,可以使sal等等,只是不同字段的排序ename的合并顺序会随之改变;

3、 delimiter的值可以改变不一定需要逗号也可以使“-”等

标签:ename,PostgreSql,string,--,agg,20,deptno,函数
From: https://www.cnblogs.com/javaxubo/p/17498275.html

相关文章

  • 序列化和反序列化以及创建对象的几种方式
    如何将对象中的信息永久保存1.将来将对象信息存入数据库2.java中提供的序列化方式来永久保存数据序列化流的概述所谓的序列化:就是把对象通过流的方式存储到文件中.注意:此对象要重写Serializable接口才能被序列化packageorg.westos.Demo;importjava.io.*;publiccl......
  • PG数据库中的聚集函数
    PG中的聚集函数聚集函数从一个输入值的集合计算出一个单一值。函数参数类型返回类型描述array_agg(*expression*)任何非数组类型参数类型的数组输入值(包括空)被连接到一个数组array_agg(*expression*)任意数组类型和参数数据类型相同输入数组被串接到一个更......
  • 深拷贝和浅拷贝的区别和与原理
    感谢参考文章:https://blog.csdn.net/weixin_45753447/article/details/124290929一、基本类型和引用类型string,number,boolean,null,undefined,symbolFunction,Array,Object基本类型是按值访问的,引用类型是按引用访问基本类型和引用类型也有人叫原始类型和对象类型,拥有......
  • Nginx服务器之负载均衡策略(6种)
    一、关于Nginx的负载均衡在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器。二、Nginx负载均衡策略负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求。一个最......
  • linux 中 echo的颜色输出
     echo:字体颜色 和背景颜色。常见的字体颜色:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,紫色=35,天蓝色=36,白色=37。常见的背景颜色:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,紫色=45,天蓝色=46,白色=47。字体控制选项:1表示高亮,4表示下划线,5表示闪烁等。因为需要使用特殊符......
  • Java 基本数据类型 - 四类八种
    感谢:https://zhuanlan.zhihu.com/p/25439066八种基本数据类型分成四个大类1、整型byte、short、int、long2、浮点型float、double3、字符型char4、布尔型boolean数据类型详细介绍整型(byte、short、int、long)虽然byte、short、int、long数据类型都......
  • LeetCode--矩形走位
    59. 螺旋矩阵II定义一个总数,是所有格子走完中心的最大数,target=n*n从1开始,每走一步,当前数+1,while(curNum<=target)就继续走定义每圈螺旋走位的边界,初始值:left=0;right=n-1;top=0;bottom=n-1;1、在顶部一行从左到右走,从left走到right由于占了顶部一行......
  • Java intern函数详解
    先看一个例子如果你会了那这篇文章你没必要看了,如果不会那请看下去,你一定会有收获:Strings=newString("hello");Stringstr1=s+"world";Stringstr3="helloworld";system.out.println(srt1==str3);Strings=newString("hello");Stringstr1=s+&q......
  • UE5 C++ TSet
    概念TSet是一种快速容器类,用于在排序不重要的情况下存储唯一元素TSet也是值类型,支持常规复制、赋值和析构函数操作,以及其元素较强的所有权TSet被销毁时,其元素也将被销毁。键类型也必须是值类型创建TSet<FString>FruitSet;添加元素Add将提供键加入setFruitSet.......
  • Linux 运行jar包的几种方式
    感谢!原文链接:https://blog.csdn.net/qq_42169450/article/details/122688940一、Linux运行jar包的几种方式方式一:java-jarxxx.jar最常用的启动jar包命令,特点:当前ssh窗口被锁定,可按CTRL+C打断程序运行,或直接关闭窗口,程序退出方式二:java-jarxxx.jar&&代表在后......