当前位置: 首页 > news >正文

PostgreSQL实战(12)高级特性

1、WITH 查询

先通过一个简单的 CTE 示例了解 WITH 查询,如下所示:

WITH t as ( 
SELECT generate series(l,3) 
SELECT * FROM t; 

generate_series 
--------------------
        1
        2
        3
(3 rows) 

递归查询使用 CTE:

WITH 查询的 一个重要属 性是 RECURSIVE ,使用 RECURSIVE 属性可以引用自己的输出,从而实现递归, 一般用于层次结构或树状结构的应用场景,一个简单的RECURSIVE 例子如下所示

WITH recursive t (x) as ( 
SELECT 1 
UNION 
SELECT x + 1 
FROM t 
WHERE x < 5 
)
SELECT sum(x) FROM t; 
输出结果为
sum 
15 
(1 row) 

2、聚合函数

   string_agg 函数:此函数语法如下所示:

string_agg(expression , delimiter) 

简单地说 string_agg 函数能将结果集某个字段的所有行连接成字符串,并用指定delimiter 分隔符分隔, expression 表示要处理的字符类型数据;参数的类型为(text, te~t)或(bytea, bytea ,函数返 回的类型同输入参数类型一致, by tea 属于 进制类型,使用情况不多,我们主 介绍 text 类型输入参数,一个例子:

mydb=> SELECT * FROM city; 
country  city 
------------+--- --- 
中国 | 台北
中国 |香港
中国 |上海
日本 东京
日本 大阪
(5 rows) 

将city 段连接成 符串的代码如下:

mydb=> SELECT str ng agg c 工 ty ,’,’) FROM city; 
string_agg 
台北,香港,上海,东京,大阪
(1 r ow ) 

array_agg 函数:array_agg 函数和 string_agg 函数类似,主要的区别为返回的类型为 数组,数组数据类型同输入 参数数据类型 一致, array_agg 函数支持两种语 第一种如下

array_agg (expression ) 输入参数为任何非数组类型

输入 数可以是任何非数组类型,返回的结果是一维数组 array_agg 函数将结果集某个字段的所有行连接成数组,例如执行以下 询:

mydb=> SELECT coutry array_agg(city) FROM city GROUP BY country; 
country  array_agg 
-- + ------
日本 | {东京 大阪}
中国 | {台北 香港 上海}

第二种 array_agg 语法如下所示:

array_agg (expression ) 输入参数为任何数组类型

返回类型为多维数组:例如:

数据如下所示:
select * from test_aray;
id
-------------------------
{ 1, 2 ' 3} 
{ 4 ' 5 , 6} 
(2 rows) 
使用 array_agg 函数 如下
mydb=> SELECT array_ agg(id) FROM test_arra y3 ; 
array_agg 
{{1 , 2 , 3) , {4 , 5 ,6 }} 
(1 r ow ) 

 

相关文章:

  • base64图上上传保存到服务器
  • ajax报错302重定向错误
  • ArcGIS Engine开发之旅03--ArcGIS Engine中的控件
  • kafka消费过程中失败,kafka重试补偿
  • 从0到1搭建属于自己的服务器
  • PostgreSQL实战(2)数据结构
  • 金蝶kis记账王初始化过程中如何设置科目
  • SpringBoot项目的jar包在启动时选择的多环境配置以及加载顺序
  • PostgreSQL中date数据类型
  • springmvc带参数链接跳转,实现单一样式容器
  • Spring Boot 打包分为 war 格式,放到Tomcat下报错的解决方案
  • 窗体的事件
  • PostgreSQL序列的创建和使用
  • PostgreSQL的数据备份与恢复(windows版本)
  • 表单提交相关
  • 分享的文章《人生如棋》
  • 「面试题」如何实现一个圣杯布局?
  • android图片蒙层
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • JavaScript设计模式系列一:工厂模式
  • Java面向对象及其三大特征
  • js写一个简单的选项卡
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • nfs客户端进程变D,延伸linux的lock
  • SegmentFault 2015 Top Rank
  • Vue2.0 实现互斥
  • vue2.0项目引入element-ui
  • 聊聊redis的数据结构的应用
  • 实战|智能家居行业移动应用性能分析
  • 使用权重正则化较少模型过拟合
  • 系统认识JavaScript正则表达式
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • ###C语言程序设计-----C语言学习(6)#
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (13)Hive调优——动态分区导致的小文件问题
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (k8s中)docker netty OOM问题记录
  • (Matlab)使用竞争神经网络实现数据聚类
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .net mvc部分视图
  • .net程序集学习心得
  • .NET企业级应用架构设计系列之应用服务器
  • /etc/sudoer文件配置简析
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [20160902]rm -rf的惨案.txt
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [AutoSar NVM] 存储架构
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [BT]BUUCTF刷题第9天(3.27)
  • [C\C++]读入优化【技巧】