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 高可用性与容错性(十三)

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

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

相关文章

Python数据分析-电信客户流量预测与分析

一、背景介绍 研究背景:在快速发展和高度竞争的电信行业中,客户流失已成为运营商面临的主要挑战之一。电信服务的普及和用户选择的多样性使得保持客户忠诚度变得越来越困难。在这种背景下,准确预测客户流失并采取相应措施,对于运…

KVM配置嵌套虚拟化

按照以下步骤启用、配置和开始使用嵌套虚拟化,默认情况下禁用该功能,要启用它,请在宿主机物理机上进行配置。在centos stream 9和ubuntu 22部署kvm默认支持虚拟机嵌套虚拟化。 1、英特尔 1.1检查嵌套虚拟化在您的主机系统上是否可用 $cat /sys/module/kvm_intel/paramete…

深入理解Java中的Collectors(Stream流)

引言 在 Java 的 Stream API 中,Collectors 是一个非常强大的工具类,它提供了许多静态方法,用于将 Stream 的元素收集到集合、字符串或其他类型的结果中。使用 Collectors,我们可以轻松地进行数据聚合和转换操作。 文章目录 引言…

【threejs】火焰特效制作

2024-06-26 08-57-16火焰 shader 来源 //shadertory:https://www.shadertoy.com/view/ctVGD1//shadertory:https://www.shadertoy.com/view/ml3GWs 代码 import { DoubleSide, ShaderChunk, ShaderMaterial } from "three";export default fu…

4、广告-考核标准

在程序化广告中,评估广告效果是衡量广告活动成功与否的关键。本章将详细介绍广告效果的定义、层次和评估方法,并提供中文名词与英文名词的一一对应。 一、广告效果的定义(Definition of Advertising Effectiveness) 广告效果是指…

华为OD机试【高矮个子排队】(java)(100分)

1、题目描述 现在有一队小朋友,他们高矮不同,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。 我们现在希望小朋友排队,以“高”“矮”“高”“矮”顺序排列,每一个“高”位置的小朋友要比相邻的位置高或…

利用BFS解决每个零售店到仓库最短距离之和问题

1、题目 矩阵中有3种类型:0仓库,-1障碍,1零售店。现在每个零售店要去距离它最近的仓库取货物,请计算出所有零售店到最近仓库距离之和,假设矩阵中每个单元格之间距离为1。如果遇到障碍物,则表示无法通过。可…

图神经网络实战(15)——SEAL链接预测算法

图神经网络实战(15)——SEAL链接预测算法 0. 前言1. SEAL 框架1.1 基本原理1.2 算法流程 2. 实现 SEAL 框架2.1 数据预处理2.2 模型构建与训练 小结系列链接 0. 前言 我们已经学习了基于节点嵌入的链接预测算法,这种方法通过学习相关的节点嵌…

决策树回归原理详解及Python代码示例

决策树回归原理详解 决策树回归(Decision Tree Regression)是一种非参数监督学习方法,它使用树形结构来对目标变量进行预测。与线性回归模型不同,决策树回归不需要预先假设数据的分布形式,因此能够很好地处理非线性和高…

2024年上半年软件设计师上午真题及答案解析

1.在计算机网络协议五层体系结构中,( B )工作在数据链路层。 A.路由器 B.以太网交换机 C.防火墙 D.集线器 网络层:路由器、防火墙 数据链路层:交换机、网桥 物理层:中继器、集线器 2.软件交付之后&#xff…

数据可视化期末考试(编程)

1.KNN 1.新增数据的分类 import pandas as pd # 您的原始数据字典 data { 电影名称: [电影1, 电影2, 电影3, 电影4, 电影5], 打斗镜头: [10, 5, 108, 115, 20], 接吻镜头: [110, 89, 5, 8, 200], 电影类型: [爱情片, 爱情片, 动作片, 动作片, 爱情片] } …

uni-app uni-data-picker级联选择器无法使用和清除选中的值

出现问题&#xff1a; 使用点击右边的叉号按钮无法清除已经选择的uni-data-picker值 解决办法&#xff1a; 在uni-app uni-data-picker使用中&#xff0c;要添加v-model&#xff0c;v-model在官网的示例中没有体现&#xff0c;但若不加则无法清除。 <uni-data-picker v-m…

OpenAI用GPT-4o打造癌症筛查AI助手;手机就能检测中风,准确率达 82%!中国气象局发布AI气象大模型...

AI for Science 企业动态速览—— * 皇家墨尔本大学用 AI 检测患者中风&#xff0c;准确率达 82% * OpenAI 用 GPT-4o 模型打造癌症筛查 AI 助手 * 中国气象局发布 AI 气象大模型风清、风雷、风顺 * AI 药企英矽智能&#xff1a;小分子抑制剂已完成中国 IIa 期临床试验全部患者…

GPT-5智能新纪元的曙光

在美国达特茅斯工程学院周四公布的采访中&#xff0c;OpenAI首席技术官米拉穆拉蒂被问及GPT-5是否会在明年发布&#xff0c;给出了肯定答案并表示将在一年半后发布。穆拉蒂在采访中还把GPT-4到GPT-5的飞跃描述为高中生到博士生的成长。 这一爆炸性的消息&#xff0c;震动了整体…

linux下进度条的实现

目录 一、代码一版 1.processbar.h 2.processbar.c 3.main.c 二、代码二版 1.processbar.h 2.processbar.c 3.main.c 三、改变文字颜色 一、代码一版 使用模块化编程 1.processbar.h #include<stdio.h> #define capacity 101 //常量使用宏定义 #define style…

Perl文件句柄深度解析:掌握文件操作的核心

Perl中的文件句柄是进行文件输入输出操作的关键。它们提供了一种机制&#xff0c;允许Perl脚本打开文件、读写数据、定位文件指针&#xff0c;以及关闭文件。理解文件句柄的使用对于编写高效的Perl脚本至关重要。本文将深入探讨Perl文件句柄的概念、使用方法和最佳实践。 1. 文…

【Pytorch使用教程】torch.backends.cudnn.benchmark = True的作用

在 PyTorch 中,设置 torch.backends.cudnn.benchmark = True 是一种优化深度学习应用程序性能的方法,特别是当你有固定输入大小的时候。 解释 CuDNN:CUDA Deep Neural Network library(CuDNN)是 NVIDIA 提供的一个 GPU 加速库,用于深度神经网络。PyTorch 在底层使用 Cu…

代码随想录——买股票的最佳时机Ⅱ(Leecode122)

添加链接描述 贪心 局部最优&#xff1a;手机每天的正利润 全局最优&#xff1a;求最大利润 class Solution {public int maxProfit(int[] prices) {int res 0;for(int i 1; i < prices.length; i){res Math.max(prices[i] - prices[i - 1], 0);}return res;} }

【计算机视觉】mmcv库详细介绍

文章目录 MMVC库概览特点和优势主要组件应用案例示例一:数据加载和处理示例二:模型训练和验证MMVC库概览 MMCV 是一个用于计算机视觉研究的开源库,它为各种视觉任务提供了底层的、高度优化的 API。该库涵盖了从数据加载到模型训练的各个方面,广泛应用于开源项目,如 MMDet…

webstorm无法识别tsconfig.json引用项目配置文件中的路径别名

问题 vite项目模板中&#xff0c;应用的ts配置内容写在tsconfig.app.json文件中&#xff0c;并在tsconfig.json通过项目引用的方式导入 {"files": [],"references": [{"path": "./tsconfig.app.json"},{"path": "./t…