postgresql-通用表达式

postgresql-通用表达式

  • 入门案例
  • 简单CTE
  • 递归 CTE
    • 案例1
    • 案例2

入门案例

-- 通用表达式
with t(n) as 
(select 2)
select * from t;

在这里插入图片描述

简单CTE

WITH cte_name (col1, col2, ...) AS (cte_query_definition
)
sql_statement;

WITH 表示定义 CTE,因此 CTE 也称为 WITH 查询;
cte_name 指定了 CTE 的名称,后面是可选的字段名
括号内是 CTE 的内容,可以是 SELECT 语句,也可以是 INSERT、UPDATE、DELETE
语句;
sql_statement 是主查询语句,可以引用前面定义的 CTE。该语句同样可以是 SELECT、
INSERT、UPDATE 或者 DELETE

select 
d.department_name,
ds.avg_sal
from departments d
join (
select 
e.department_id ,avg(e.salary) avg_sal
from employees e 
group by e.department_id
) ds 
on (d.department_id = ds.department_id);

在这里插入图片描述

with department_avg(deparment_id,avg_sal) as
(select e.department_id ,avg(e.salary) as avg_salfrom employees e group by e.department_id 
)
select 
d.department_name,
da.avg_sal
from departments d 
join department_avg da 
on (d.department_id = da.deparment_id);

在这里插入图片描述

递归 CTE

WITH RECURSIVE cte_name AS(cte_query_initial -- 初始化部分UNION [ALL]cte_query_iterative -- 递归部分
) SELECT * FROM cte_name;

recursive 表示递归;
cte_query_initial 是初始化查询,用于创建初始结果集;
cte_query_iterative 是递归部分,可以引用 cte_name;
如果递归查询无法从上一次迭代中返回更多的数据,将会终止递归并返回结果

案例1

-- 递归生成数字序列
with recursive t(n) as (select 1 -- 初始化union allselect n+1 from t where n < 10-- 递归
) select * from t;

在这里插入图片描述
以上sql语句执行过程:
1.执行 CTE 中的初始化查询,生成一行数据(1)
2. 第一次执行递归查询,判断 n < 10 成立,生成一行数据 2(n+1)
3. 重复执行递归查询,生成更多的数据;直到 n = 10 终止;此时临时表 t 中包含 10 条数据;
4. 执行主查询,返回所有的数据
5. 如果没有指定终止条件,上面的查询将会进入死循环

案例2

with recursive emp_path(emp_id,emp_name,path) as (select e.employee_id, e.first_name||','||e.last_name,e.first_name||','||e.last_name from employees ewhere e.manager_id is null union allselect e2.employee_id , e2.first_name||','||e2.last_name,path||'->'||e2.first_name||','||e2.last_name from employees e2join emp_path p on (e2.manager_id = p.emp_id)
)
select * from emp_path

在这里插入图片描述
初始化查询语句返回了公司最高层的领导(manager_id IS NULL),也就是
“Steven,King”;递归查询将员工表的 manager_id 与已有结果集中的 employee_id 关联,获取每个
员工的下一级员工,直到无法找到新的数据;path 字段存储了每个员工从上至下的管理路径

参考文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/74903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity】rotation和Quaternion学习笔记

1.rotation 赋值 Quaternion可以为transform.rotation 赋值 2. 从正轴面向原点&#xff0c;顺时针旋转&#xff0c;角度正增加 正x轴面向原点&#xff0c;顺时针旋转&#xff0c;z正轴往下&#xff0c;rotation的x正增加。 3.rotation和Quaternion的关系 1.查询 2.实践 旋转…

LVS DR模式负载均衡群集部署

目录 1 LVS-DR 模式的特点 1.1 数据包流向分析 1.2 DR 模式的特点 2 DR模式 LVS负载均衡群集部署 2.1 配置负载调度器 2.1.1 配置虚拟 IP 地址 2.1.2 调整 proc 响应参数 2.1.3 配置负载分配策略 2.2 部署共享存储 2.3 配置节点服务器 2.3.1 配置虚拟 IP 地址 2.3.2…

树形控件加自定义图标样式及指引线

记录一下留用&#xff0c;有错误请指正。 效果图如下&#xff1a; 自定义图标及指引线 代码&#xff1a; <div class"head-container" style"margin-left: -15px;"><el-tree icon-class"none"style"height:100%; overflow-y: h…

滚动菜单 flutter

想实现这个功能&#xff1a; 下面的代码可以实现&#xff1a; import package:flutter/material.dart;void main() > runApp(MyApp());class MyApp extends StatelessWidget {static const String _title Flutter Code Sample;overrideWidget build(BuildContext context)…

vcruntime140_1.dll修复的方法大全,缺失vcruntime140_1.dll解决方法分享

vcruntime140_1.dll这个文件在电脑里属于挺重要的一个文件&#xff0c;一但它缺失了&#xff0c;那么很多程序都是运行不了的&#xff0c;今天我们就来讲解一下这个vcruntime140_1.dll修复以及它的一些作用和属性。 一.vcruntime140_1.dll的作用 vcruntime140_1.dll是Microso…

在MAC电脑上将NTFS格式移动硬盘转换为ExFAT格式

注意&#xff1a;转化之前先将移动硬盘中的内容进行备份 1、点击桌面上的【前往】&#xff0c;选择【实用工具】 2、在列表中选择【磁盘工具】 3、在左侧选中你的磁盘&#xff0c;点击右侧上方的【抹掉】,注意&#xff1a;将永久抹掉储存在上面的所有数据&#xff0c;因此需要…

Alibaba(商品详情)API接口

为了进行电商平台 的API开发&#xff0c;首先我们需要做下面几件事情。 1&#xff09;开发者注册一个账号 2&#xff09;然后为每个alibaba应用注册一个应用程序键&#xff08;App Key) 。 3&#xff09;下载alibaba API的SDK并掌握基本的API基础知识和调用 4&#xff09;利…

计算机专业毕业设计项目推荐03-Wiki系统设计与实现(JavaSpring+Vue+Mysql)

Wiki系统设计与实现&#xff08;JavaSpringVueMysql&#xff09; **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设…

大数据技术之Hadoop:提交MapReduce任务到YARN执行(八)

目录 一、前言 二、示例程序 2.1 提交wordcount示例程序 2.2 提交求圆周率示例程序 三、写在最后 一、前言 我们前面提到了MapReduce&#xff0c;也说了现在几乎没有人再写MapReduce代码了&#xff0c;因为它已经过时了。然而不写代码不意味着它没用&#xff0c;当下很火…

103. 二叉树的锯齿形层序遍历

103. 二叉树的锯齿形层序遍历 题目-中等难度示例1. bfs 题目-中等难度 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09…

Elasticsearch:使用 ESRE 和生成式 AI 了解 TLS 日志错误

作者&#xff1a;DAVID HOPE 本博客介绍了 Elasticsearch 相关性引擎 (ESRE​​) 及其 Elastic Learned Sparse Encoder 功能的新颖应用&#xff0c;特别是在日志分析中。 最近发布的 Elasticsearch Relevance Engine™ (ESRE™) 包含一系列重要功能&#xff0c;可增强搜索能力…

OSPF路由计算

1、Router LSA LSA 链路状态通告&#xff0c;是OSPF进行路由计算的主要依据&#xff0c;在OSPF的LSU报文中携带&#xff0c;其头重要字段及解释&#xff1a; LS Type&#xff08;链路状态类型&#xff09;&#xff1a;指示本LSA的类型。 在域内、域间、域外…

goweb入门

创建gomod项目 go mod init web01新建main.go package mainimport ("fmt""net/http" )func handler(writer http.ResponseWriter, request *http.Request) {fmt.Fprintf(writer, "Hello World,%s!", request.URL.Path[1:]) } func main() {fmt…

李宏毅深度学习self-attentin学习笔记

self-attention 一、self-attention的起源二、self-attention网络架构三、multi-head self-attention四、positional encoding五、pytorch实现 一、self-attention的起源 self-attention初始也是用于解决seq2seq的问题。即input是一堆序列&#xff0c;而output也是一段长度固定…

网络层--IP协议

引入&#xff1a; IP协议主要解决什么问题呢&#xff1f; IP协议提供一种将数据从主机&#xff21; 发送到 主机&#xff22;的能力。&#xff08;有能力不一定能做到&#xff0c;比如小明很聪明&#xff0c;可以考100分&#xff0c;但是他也不是每次搜能考100分&#xff0…

java面试题(17):链表两数相加

两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 开头…

基于SpringBoot+微信小程序的智慧医疗线上预约问诊小程序

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 近年来&#xff0c;随…

MyBatis 框架入门理论与实践

文章目录 1. MyBatis 框架介绍1.1 MyBatis优点1.2 MyBatis 不足 2. MyBatis 框架整体架构3. MyBatis 的 ORM 介绍4. MyBatis 框架入门开发4.1 入门案例的搭建4.1.1 准备SQL数据4.1.2 新建 SpringBoot 项目4.1.3 pom文件&#xff1a;4.1.4 配置文件4.1.5 mapper 和 mapper.xml4.…

mysql修改密码

1.mysql5.7以后和8.0版本的修改方法 摘要&#xff1a;经常会遇到mysql忘记密码&#xff0c;以及在公司中&#xff0c;交接没有完成导致无法进入数据库&#xff0c;下面提供了mysql的修改密码方法和使用图形化工具连接数据库的方法以及不需要密码直接进入数据库。 启动mysqld进…

电商类面试问题--01Elasticsearch与Mysql数据同步问题

在实现基于关键字的搜索时&#xff0c;首先需要确保MySQL数据库和ES库中的数据是同步的。为了解决这个问题&#xff0c;可以考虑两层方案。 全量同步&#xff1a;全量同步是在服务初始化阶段将MySQL中的数据与ES库中的数据进行全量同步。可以在服务启动时&#xff0c;对ES库进…