PostgreSQL 高级SQL查询(三)
1. JOIN 操作
1.1 内连接(INNER JOIN)
内连接用于返回两个表中存在匹配关系的记录。基本语法如下:
SELECT columns
FROM table1
INNER JOIN table2 ON table1.column = table2.column;
例如,从 users 表和 orders 表中检索所有用户及其订单信息:
SELECT users.username, orders.order_id, orders.order_date
FROM users
INNER JOIN orders ON users.id = orders.user_id;
1.2 左连接(LEFT JOIN)
左连接返回左表中的所有记录,即使右表中没有匹配的记录。基本语法如下:
SELECT columns
FROM table1
LEFT JOIN table2 ON table1.column = table2.column;
例如,检索所有用户及其订单信息(包括没有订单的用户):
SELECT users.username, orders.order_id, orders.order_date
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
1.3 右连接(RIGHT JOIN)
右连接返回右表中的所有记录,即使左表中没有匹配的记录。基本语法如下:
SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.column = table2.column;
例如,检索所有订单及其用户信息(包括没有用户信息的订单):
SELECT users.username, orders.order_id, orders.order_date
FROM users
RIGHT JOIN orders ON users.id = orders.user_id;
1.4 全连接(FULL JOIN)
全连接返回左表和右表中所有匹配的记录以及不匹配的记录。基本语法如下:
SELECT columns
FROM table1
FULL JOIN table2 ON table1.column = table2.column;
例如,检索所有用户及其订单信息(包括没有订单的用户和没有用户信息的订单):
SELECT users.username, orders.order_id, orders.order_date
FROM users
FULL JOIN orders ON users.id = orders.user_id;
2. 子查询
子查询是嵌套在另一个查询中的查询,用于复杂的查询操作。可以分为两类:标量子查询和表子查询。
2.1 标量子查询
标量子查询返回单个值,可以在 SELECT、WHERE 和 HAVING 子句中使用。
例如,查询订单金额最高的订单:
SELECT order_id, amount
FROM orders
WHERE amount = (SELECT MAX(amount) FROM orders);
2.2 表子查询
表子查询返回一个结果集,可以在 FROM 子句中使用。
例如,查询订单金额大于平均订单金额的订单:
SELECT order_id, amount
FROM orders
WHERE amount > (SELECT AVG(amount) FROM orders);
3. 聚合函数与分组
3.1 常用聚合函数
- COUNT(): 计数
- SUM(): 求和
- AVG(): 平均值
- MAX(): 最大值
- MIN(): 最小值
例如,查询用户总数:
SELECT COUNT(*) FROM users;
3.2 分组(GROUP BY)
GROUP BY 子句用于将结果集按照一个或多个列进行分组。基本语法如下:
SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1;
例如,按用户分组并计算每个用户的订单总金额:
SELECT user_id, SUM(amount) as total_amount
FROM orders
GROUP BY user_id;
3.3 过滤分组结果(HAVING)
HAVING 子句用于过滤分组后的结果集。基本语法如下:
SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1
HAVING condition;
例如,查询订单总金额大于1000的用户:
SELECT user_id, SUM(amount) as total_amount
FROM orders
GROUP BY user_id
HAVING SUM(amount) > 1000;
4. 窗口函数
窗口函数用于在查询结果集中执行计算,类似于聚合函数,但不缩小结果集的范围。常用窗口函数包括 ROW_NUMBER()、RANK() 和 DENSE_RANK()。
例如,为每个用户的订单按金额排序:
SELECT user_id, order_id, amount,RANK() OVER (PARTITION BY user_id ORDER BY amount DESC) as rank
FROM orders;
5. 案例实战
5.1 练习题目
- 查询每个用户的最新订单。
- 查询订单总金额排名前 5 的用户。
- 按月统计订单数量。
5.2 示例答案
- 查询每个用户的最新订单:
SELECT user_id, order_id, order_date
FROM (SELECT user_id, order_id, order_date,ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY order_date DESC) as rnFROM orders
) subquery
WHERE rn = 1;
- 查询订单总金额排名前 5 的用户:
SELECT user_id, SUM(amount) as total_amount
FROM orders
GROUP BY user_id
ORDER BY total_amount DESC
LIMIT 5;
- 按月统计订单数量:
SELECT DATE_TRUNC('month', order_date) as month, COUNT(*) as order_count
FROM orders
GROUP BY month
ORDER BY month;
系统文章目录:
PostgreSQL 简介与基础(一)
PostgreSQL 基本SQL语法(二)
PostgreSQL 高级SQL查询(三)
PostgreSQL 数据库设计与管理(四)
PostgreSQL 高级功能(五)
PostgreSQL 性能优化与调优(六)
PostgreSQL 高可用性与灾难恢复策略(七)
PostgreSQL 安全性与权限管理(八)
PostgreSQL 高级功能与扩展(九)
PostgreSQL 分区表与并行查询(十)
PostgreSQL 索引优化与性能调优(十一)
PostgreSQL 日志管理与故障排查(十二)
PostgreSQL 高可用性与容错性(十三)
相关文章:
PostgreSQL 高级SQL查询(三)
1. JOIN 操作 1.1 内连接(INNER JOIN) 内连接用于返回两个表中存在匹配关系的记录。基本语法如下: SELECT columns FROM table1 INNER JOIN table2 ON table1.column table2.column;例如,从 users 表和 orders 表中检索所有用…...
 
麒麟系统安装Redis
一、背景 如前文(《麒麟系统安装MySQL》)所述。 二、下载Redis源码 官方未提供麒麟系统的Redis软件,须下载源码编译。 下载地址:https://redis.io/downloads 6.2.14版本源码下载地址:https://download.redis.io/re…...
 
Java-方法引用
方法引用概念 把已经有的方法拿过来用,当做函数式接口中抽象方法的方法体 前提条件 1、引用处必须是函数式接口 2、被引用的方法必须已经存在 3、被引用方法的形参和返回值 需要跟抽象方法保持一致 4、被引用方法的功能要满足当前需求 方法引用格式示例 方…...
 
华为---配置基本的访问控制列表(ACL)
11、访问控制列表(ACL) 11.1 配置基本的访问控制列表 11.1.1 原理概述 访问控制列表ACL(Access Control List)是由permit或deny语句组成的一系列有顺序的规则集合,这些规则根据数据包的源地址、目的地址、源端口、目的端口等信息来描述。A…...
 
Apple Intelligence,我们能得到什么?(上)
苹果公司WWDC 2024发布会,苹果AI成为最吸睛的焦点。不过,苹果的AI不是大家口中的AI,而是苹果独有的概念:Apple Intelligence,苹果智能。 所谓Apple Intelligence,被定义为iPhone、iPad和Mac的个人智能系统…...
【数据库中的存储桶】
存储桶是对象存储系统中的一个核心概念,起源于Amazon S3(Simple Storage Service)并被其他对象存储解决方案(如MinIO、Google Cloud Storage等)广泛采用。在传统的文件系统中,我们通常使用目录和子目录来组…...
多选项卡的shiny
下面是一个包含多个选项卡的 Shiny 应用程序示例代码。在这个例子中,我们创建了一个包含三个选项卡的 Shiny 应用程序,每个选项卡中都有不同的内容。 library(shiny)# Define UI ui <- fluidPage(titlePanel("多选项卡 Shiny 应用"),tabse…...
Python项目Django框架发布相关
1.Nginx配置 server { listen 80; server_name 域名地址;location / { uwsgi_pass 0.0.0.0:4563;// 运行地址include uwsgi_params;} location /static{ // 静态文件路径alias /www/wwwroot/djserverproject/static;}}server { listen 443; server_name 域名地址;ssl_certific…...
 
kettle使用手册 安装9.0版本 建议设置为英语
0.新建转换的常用组件 0. Generate rows 定义一个字符串 name value就是字符串的值 0.1 String operations 字段转大写 去空格 1. Json input 来源于一个json文件 1.json 或mq接收到的data内容是json字符串 2. Json output 定义Jsonbloc值为 data, 左侧Fieldname是数据库…...
golang string、byte[]以及rune的基本概念,用法以及区别
在 Go 语言中,string、byte[] 和 rune 是处理文本和字符的三种不同数据类型。它们有各自的用途和特点,下面将详细介绍它们的基本概念、用法以及区别。 1. string 基本概念 字符串类型:string 是 Go 语言中的一种基本类型,用于表…...
全国211大学名单及排名
序号 名称 省份 985 211 双一流 1 北京大学 北京 是 是 是 2 清华大学 北京 是 是 是 3 复旦大学 上海 是 是 是 4 上海交通大学 上海 是 是 是 5 浙江大学 浙江 是 是 是 6 国防科技大学 湖南 是 是 是 7 中国人民大学 北京 是 …...
ASR 语音识别相关
ASR 语音识别 ASR(Automatic Speech Recognition,自动语音识别)是一种能够将语音转换为文本的技术。这种技术使得计算机能够“听懂”我们说的话,并将它们记录下来。这项技术被广泛应用于日常生活中的各种场景,比如语音…...
kotlin require和assert 区别
在 Kotlin 中,require 和 assert 是两种用于验证条件的方法,主要区别在于它们的使用场景和触发机制。 require require 用于函数参数的验证。如果条件不满足,它会抛出 IllegalArgumentException 异常。这通常用于对公共 API 的输入参数进行…...
考研:数学一/二 和英语一/二 有什么区别
考研数学一/二 区别: 考试内容: 数学一:考查内容包括高等数学、线性代数、以及概率论与数理统计,覆盖的知识面较为全面,题目难度也相对较高。数学二:考试内容包含高等数学和线性代数,不包括概率…...
 
地铁中的CAN通信--地铁高效安全运转原理
目前地铁采用了自动化的技术来实现控制,有ATC(列车自动控制)系统可以实现列车自动驾驶、自动跟踪、自动调度;SCADA(供电系统管理自动化)系统可以实现主变电所、牵引变电所、降压变电所设备系统的遥控、遥信、遥测;BAS(环境监控系统)和FAS(火灾报警系统)可以实现车站…...
简化数据提取:Excel-Extractor 使用指南
前言 在当今数据驱动的世界中,从复杂的 Excel 文件中提取和分析数据是许多业务和研究工作的基本需求。为了简化这一过程,Excel-Extractor 项目应运而生。本文将为你介绍 Excel-Extractor 的功能和如何在你的项目中使用它。 什么是 Excel-Extractor&…...
 
用户中心项目全流程
企业做项目流程 需求分析 > 设计(概要设计 、 详细设计) > 技术选型 >初始化项目 / 引入需要的技术 > 写个小demo > 写代码 (实现业务逻辑) > 测试(单元测试)> 代码提交 / 代码评审 …...
 
达梦数据库的系统视图v$database
达梦数据库的系统视图v$database 基础信息 OS版本: Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本: DM Database Server 64 V8 DB Version: 0x7000c 03134284132-20240115-215128-20081在达梦数据库(Dameng Database…...
 
Vue.js中的虚拟DOM
一.节点和状态 在我们平常对DOM操作的时候,之前在vue没有诞生之前,以命令式的方式对DOM进行操作,页面上的每一个元素都可以看做成一个节点状态。 二.剔除和渲染 框架都有自己渲染的方式,假设一个页面的状态,随着Ajax请求的放松,状态发生改变,有以下的两种方式供你选择&#…...
【设计模式之迭代器模式 -- C++】
迭代器模式 – 遍历集合,无需暴露 迭代器模式是一种设计模式,用于顺序访问集合对象的元素,而无需暴露其底层实现。迭代器模式分离了集合对象的遍历行为,使得访问元素时,可以不必了解集合对象的底层实现。 组成 迭代…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
 
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
 
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
 
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
 
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
