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

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 标量子查询

标量子查询返回单个值,可以在 SELECTWHEREHAVING 子句中使用。

例如,查询订单金额最高的订单:

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 练习题目

  1. 查询每个用户的最新订单。
  2. 查询订单总金额排名前 5 的用户。
  3. 按月统计订单数量。

5.2 示例答案

  1. 查询每个用户的最新订单:
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;
  1. 查询订单总金额排名前 5 的用户:
SELECT user_id, SUM(amount) as total_amount
FROM orders
GROUP BY user_id
ORDER BY total_amount DESC
LIMIT 5;
  1. 按月统计订单数量:
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 应用程序示例代码。在这个例子中&#xff0c;我们创建了一个包含三个选项卡的 Shiny 应用程序&#xff0c;每个选项卡中都有不同的内容。 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 语言中&#xff0c;string、byte[] 和 rune 是处理文本和字符的三种不同数据类型。它们有各自的用途和特点&#xff0c;下面将详细介绍它们的基本概念、用法以及区别。 1. string 基本概念 字符串类型&#xff1a;string 是 Go 语言中的一种基本类型&#xff0c;用于表…...

全国211大学名单及排名

序号 名称 省份 985 211 双一流 1 北京大学 北京 是 是 是 2 清华大学 北京 是 是 是 3 复旦大学 上海 是 是 是 4 上海交通大学 上海 是 是 是 5 浙江大学 浙江 是 是 是 6 国防科技大学 湖南 是 是 是 7 中国人民大学 北京 是 …...

ASR 语音识别相关

ASR 语音识别 ASR&#xff08;Automatic Speech Recognition&#xff0c;自动语音识别&#xff09;是一种能够将语音转换为文本的技术。这种技术使得计算机能够“听懂”我们说的话&#xff0c;并将它们记录下来。这项技术被广泛应用于日常生活中的各种场景&#xff0c;比如语音…...

kotlin require和assert 区别

在 Kotlin 中&#xff0c;require 和 assert 是两种用于验证条件的方法&#xff0c;主要区别在于它们的使用场景和触发机制。 require require 用于函数参数的验证。如果条件不满足&#xff0c;它会抛出 IllegalArgumentException 异常。这通常用于对公共 API 的输入参数进行…...

考研:数学一/二 和英语一/二 有什么区别

考研数学一/二 区别&#xff1a; 考试内容&#xff1a; 数学一&#xff1a;考查内容包括高等数学、线性代数、以及概率论与数理统计&#xff0c;覆盖的知识面较为全面&#xff0c;题目难度也相对较高。数学二&#xff1a;考试内容包含高等数学和线性代数&#xff0c;不包括概率…...

地铁中的CAN通信--地铁高效安全运转原理

目前地铁采用了自动化的技术来实现控制,有ATC(列车自动控制)系统可以实现列车自动驾驶、自动跟踪、自动调度;SCADA(供电系统管理自动化)系统可以实现主变电所、牵引变电所、降压变电所设备系统的遥控、遥信、遥测;BAS(环境监控系统)和FAS(火灾报警系统)可以实现车站…...

简化数据提取:Excel-Extractor 使用指南

前言 在当今数据驱动的世界中&#xff0c;从复杂的 Excel 文件中提取和分析数据是许多业务和研究工作的基本需求。为了简化这一过程&#xff0c;Excel-Extractor 项目应运而生。本文将为你介绍 Excel-Extractor 的功能和如何在你的项目中使用它。 什么是 Excel-Extractor&…...

用户中心项目全流程

企业做项目流程 需求分析 > 设计&#xff08;概要设计 、 详细设计&#xff09; > 技术选型 >初始化项目 / 引入需要的技术 > 写个小demo > 写代码 &#xff08;实现业务逻辑&#xff09; > 测试&#xff08;单元测试&#xff09;> 代码提交 / 代码评审 …...

达梦数据库的系统视图v$database

达梦数据库的系统视图v$database 基础信息 OS版本&#xff1a; Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本&#xff1a; DM Database Server 64 V8 DB Version: 0x7000c 03134284132-20240115-215128-20081在达梦数据库&#xff08;Dameng Database&#xf…...

Vue.js中的虚拟DOM

一.节点和状态 在我们平常对DOM操作的时候,之前在vue没有诞生之前,以命令式的方式对DOM进行操作,页面上的每一个元素都可以看做成一个节点状态。 二.剔除和渲染 框架都有自己渲染的方式,假设一个页面的状态,随着Ajax请求的放松,状态发生改变,有以下的两种方式供你选择&#…...

【设计模式之迭代器模式 -- C++】

迭代器模式 – 遍历集合&#xff0c;无需暴露 迭代器模式是一种设计模式&#xff0c;用于顺序访问集合对象的元素&#xff0c;而无需暴露其底层实现。迭代器模式分离了集合对象的遍历行为&#xff0c;使得访问元素时&#xff0c;可以不必了解集合对象的底层实现。 组成 迭代…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...