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

PostgreSQL 进阶 - 使用foreign key,使用 subqueries 插入,inner joins,outer joins

1. 使用foreign key 创建 table

CREATE TABLE orders(
order_id SERIAL PRIMARY KEY,
purchase_total NUMERIC,
timestamp TIMESTAMPTZ,
customer_id INT
REFERENCES customers(customer_id)
ON DELETE CASCADE);
  • “order_id”:作为主键的自增序列,使用 SERIAL 数据类型。
  • “purchase_total”:用于存储购买总额的数值类型。
  • “timestamp”:用于存储时间戳的 TIMESTAMPTZ 数据类型。
  • “customer_id”:用于存储指向“customers”表中“customer_id”的外键,使用 INT 数据类型。同时,定义了一个外键约束,指定了当“customers”表中对应的记录被删除时,与之相关的“orders”表中的记录也将被自动删除(使用 ON DELETE CASCADE)。
DELETE FROM customers
WHERE customer_id = 4
RETURNING *;
  • 用于从“customers”表中删除“customer_id”为4的记录。

2. 找出每个客户的交易总值

SELECT customer_id,
MAX(purchase_total)
AS top_order_amt
FROM orders
GROUP BY customer_id
ORDER BY top_order_amt DESC;
  • 按照“customer_id”分组,并找到每个客户的最大“purchase_total”值。
  • 使用“AS”关键字将最大“purchase_total”值的别名命名为“top_order_amt”。
  • 按照“top_order_amt”降序对结果集进行排序。

在这里插入图片描述

SELECT customer_id,
SUM(purchase_total::NUMERIC)
FROM orders
GROUP BY customer_id
ORDER BY sum DESC LIMIT 2;
  • 按照“customer_id”进行分组,并计算每个客户的“purchase_total”值的总和。
  • 在结果集中,它会显示客户ID以及对应的购买总额之和。
  • 它会按照计算出的购买总额之和进行降序排序,并只返回前两条记录(使用 LIMIT 2)。
    在这里插入图片描述

3. 使用 subqueries 插入

SELECT * FROM customers;

在这里插入图片描述

INSERT INTO orders(purchase_total, timestamp, customer_id)
VALUES('50.50', '2023-06-01 08:01:31.876335-07',
(SELECT customer_id FROM customers WHERE email='kdiamond@myemail.com'))
RETURNING *;

-使用子查询查找了与电子邮件为 ‘kdiamond@myemail.com’ 相对应的“customers”表中的“customer_id”值。

在这里插入图片描述

SELECT * FROM orders;

在这里插入图片描述

4. 处理重复的记录

SELECT * FROM bookmarks;

在这里插入图片描述

SELECT url, name, COUNT(*)
FROM bookmarks
GROUP BY url, name
HAVING COUNT(*) > 1;
  • 按照“url”和“name”分组,并统计每组中的记录数量。
  • 使用“HAVING”子句过滤出出现次数超过1次的记录组。
  • 最终返回“url”、“name”和对应的记录数量。
    在这里插入图片描述
SELECT * FROM bookmarks
WHERE id IN (
SELECT id FROM bookmarks
EXCEPT SELECT MAX(id)
FROM bookmarks
GROUP BY url, name, description)
ORDER BY url, name, description;

在这里插入图片描述

DELETE FROM bookmarks
WHERE id IN (
SELECT id FROM bookmarks
EXCEPT SELECT MAX(id)
FROM bookmarks
GROUP BY url, name, description)
RETURNING *;

在这里插入图片描述

SELECT * FROM bookmarks;

在这里插入图片描述

5. inner joins

在这里插入图片描述
在这里插入图片描述

SELECT o.order_id, o.purchase_total, c.email
FROM orders o
INNER JOIN customers c ON
o.customer_id = c.customer_id;
  • 内连接(INNER JOIN)是一种用于从两个或多个表中检索相关行的 SQL 查询。它基于两个表之间共享的值,将这些表中相匹配的行连接起来。内连接只返回两个表中共有的行,即满足连接条件的行。

在这里插入图片描述

6. outer joins

在这里插入图片描述
在这里插入图片描述

SELECT p.program_name,
COUNT(s.student_id) AS student_count
FROM programs p
LEFT OUTER JOIN students s ON
p.program_id = s.program_id
GROUP BY p.program_name;
  • 如果左表(programs表)中的行没有与右表(students表)中的行匹配,那么将会用 NULL 值填充右表中的列。
  • 左外连接(LEFT OUTER JOIN)是一种 SQL 连接操作,用于从两个表中检索相关行。左外连接返回左表中的所有行,以及右表中与左表匹配的行。如果右表中没有与左表匹配的行,则以 NULL 值填充右表中的列。这使得即使右表中没有匹配的行,左表中的所有行也会出现在结果集中。

在这里插入图片描述

7. 创建一个暂时的表格

CREATE TEMPORARY TABLE temp_customer_purchases AS
SELECT c.customer_id, c.email,
SUM(o.purchase_total) AS purchases
FROM customers c
INNER JOIN orders o ON c.customer_id = o.customer_id
GROUP BY c.customer_id, c.email;
  • 用于在数据库中创建一个临时表(temporary table),名为“temp_customer_purchases”。
  • 使用“INNER JOIN”根据“customer_id”将两个表中匹配的行进行连接。
SELECT * FROM temp_customer_purchases;

在这里插入图片描述

相关文章:

PostgreSQL 进阶 - 使用foreign key,使用 subqueries 插入,inner joins,outer joins

1. 使用foreign key 创建 table CREATE TABLE orders( order_id SERIAL PRIMARY KEY, purchase_total NUMERIC, timestamp TIMESTAMPTZ, customer_id INT REFERENCES customers(customer_id) ON DELETE CASCADE);“order_id”:作为主键的自增序列,使用 …...

【Python 千题 —— 基础篇】地板除计算

题目描述 题目描述 编写一个程序,接受用户输入的两个数字,然后计算这两个数字的地板除(整除)结果,并输出结果。 输入描述 输入两个数字,用回车隔开两个数字。 输出描述 程序将计算这两个数字的地板除…...

【随手记】np.random.choice()函数

np.random.choice() 是 NumPy 中的一个随机抽样函数,用于从给定的一维数组中随机抽取指定数量或指定概率的元素。该函数可以用于构建模拟实验、生成随机数据集、数据抽样等应用场景。 np.random.choice(a, sizeNone, replaceTrue, pNone) 的参数如下: …...

2003-2022年地级市-财政收支明细数据(企业、个人所得税、科学、教育、医疗等)

2003-2022年地级市-财政收支明细数据(企业、个人所得税、科学、教育、医疗等) 1、时间:2003-2022年 2、指标:行政区划代码、年份、地区、一般公共预算收入、一般公共预算-税收收入、一般公共预算-税收收入-增值税收入、一般公共…...

影响服务器正常使用的有哪些因素

对于网站优化来说,网站服务器的优化绝对是基础。不管是用户还是搜索引擎对于网站的打开速度都是没有太多耐心的, 所以网站优化的就是要保证网站服务器稳定,网站正常且快速的打开 1.用户体验较差 现在越来越强调用户体验,设想一下…...

NLP学习笔记:使用 Python 进行NLTK

一、说明 本文和接下来的几篇文章将介绍 Python NLTK 库。NLTK — 自然语言工具包 — NLTK 是一个强大的开源库,用于 NLP 的研究和开发。它内置了 50 多个文本语料库和词汇资源。它支持文本标记化、词性标记、词干提取、词形还原、命名实体提取、分割、分类、语义推…...

突破性技术!开源多模态模型—MiniGPT-5

多模态生成一直是OpenAI、微软、百度等科技巨头的重要研究领域,但如何实现连贯的文本和相关图像是一个棘手的难题。 为了突破技术瓶颈,加州大学圣克鲁斯分校研发了MiniGPT-5模型,并提出了全新技术概念“Generative Vokens "&#xff0c…...

IntelliJ IDEA快捷键sout不生效

1.刚下载完idea编辑器时,可能idea里的快捷键打印不生效。这时你打开settings 2.点击settings–>Live Templates–>找到Java这个选项,点击展开 3.找到sout 4.点击全选,保存退出就可以了 5.最后大功告成!...

用C++QT实现一个modbus rtu通讯程序框架

下面是一个简单的Modbus RTU通讯程序框架的示例&#xff0c;使用C和QT来实现&#xff1a; #include <QCoreApplication> #include <QSerialPort> #include <QModbusDataUnit> #include <QModbusRtuSerialMaster>int main(int argc, char *argv[]) {QC…...

Python如何设置下载第三方软件包的国内镜像站服务器的地址

使用pip下载第三方python软件包时&#xff0c;如果下载的速度太慢&#xff0c;说明是从国外的服务器上下载的。需要进行一个设置&#xff0c;让pip从国内的镜像站服务器下载。 1. 新建一个纯文本文件&#xff0c;Windows下名字叫做pip.ini&#xff1b;Linux下名字叫做pip.cnf…...

ChatGLM3-6B详细安装过程记录(Linux)

先附上GitHub官方地址: https://github.com/THUDM/ChatGLM3https://github.com/THUDM/ChatGLM3 目录 一、预览 1. 基于 Gradio 的网页版 demo...

python的类

python中的类用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 一、object是python的默认类&#xff0c;有很多方法&#xff0c;python3默认所有的类都继承object&#xff0c;定义类的时候类名后面加不加括号&#x…...

前端 用HTML,CSS, JS 写一个简易的音乐播放器

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Music Player</title><style>/* 样式可自行修改 */.container {width: 600px;margin: 0 auto;}h2 {text-align: center;}.controls {displ…...

自定义QChartView实现鼠标放在图表时,显示鼠标位置坐标值(x,y)

前言&#xff1a;因为需要一次性从文件中加载大量数据到图表中显示&#xff0c;所以打算使用qchartviewqscrollarea&#xff0c;当横坐标数据超出默认设定的显示范围之后&#xff0c;重新设置chartview的宽度和scrollarea内容区域(scrollAreaWidgetContents)的宽度&#xff0c;…...

antv/g6 交互与事件及自定义Behavior

监听和绑定事件 在 G6 中&#xff0c;提供了直接的单机事件、还有监听时机的方法。可以监听画布、节点、边、以及各函数被调用的时机等&#xff1a; 1. 绑定事件 要绑定事件&#xff0c;首先需要获得图表实例&#xff08;Graph 实例&#xff09;&#xff0c;然后使用 on 方法…...

MongoDB根据时间范围查询

MongoDB 查询语句示例 1. 根据时间范围查询 db.getCollection(orders).find({"enabled":true,"$or": [{"endTime": {"$gt":ISODate("2023-10-18T14:45:17.69870008:00")}}, {"endTime": null}], "startTim…...

大数据Doris(十五):Doris表的字段类型

文章目录 Doris表的字段类型 一、TINYINT数据类型 二、SMALLINT数据类型 三、INT数据类型...

文本批量处理,一键转换HTML文件编码,释放您的繁琐工作!

亲爱的用户&#xff0c;您是否曾经为需要手动转换HTML文件编码而耗费大量时间和精力而感到困扰&#xff1f;现在&#xff0c;我们为您提供了一款强大的文本批量处理工具&#xff01;让您一键将HTML文件编码进行转换&#xff0c;轻松释放您的繁琐工作&#xff01; 首先&#xf…...

硬件工程师到底可以从哪些方面提升自己?

大家好,这里是大话硬件。 最近在大话硬件群里,聊得比较多的就是讨论怎么提升自己的能力,怎么拿到更高的工资。我想,这可能并不是只在大话硬件群才有的话题,其实在每一位工作的人心里应该都在想的两个问题。 因此,这篇文章简单分享一下,作为一名硬件工程师,可以在做哪…...

论文辅助笔记:t2vec models.py

1 EncoderDecoder 1.1 _init_ class EncoderDecoder(nn.Module):def __init__(self, vocab_size, embedding_size,hidden_size, num_layers, dropout, bidirectional):super(EncoderDecoder, self).__init__()self.vocab_size vocab_size #词汇表大小self.embedding_size e…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言&#xff1a;本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中&#xff0c;跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南&#xff0c;你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案&#xff0c;并结合内网…...

电脑桌面太单调,用Python写一个桌面小宠物应用。

下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡&#xff0c;可以响应鼠标点击&#xff0c;并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...

精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑

精益数据分析&#xff08;98/126&#xff09;&#xff1a;电商转化率优化与网站性能的底层逻辑 在电子商务领域&#xff0c;转化率与网站性能是决定商业成败的核心指标。今天&#xff0c;我们将深入解析不同类型电商平台的转化率基准&#xff0c;探讨页面加载速度对用户行为的…...

PostgreSQL 对 IPv6 的支持情况

PostgreSQL 对 IPv6 的支持情况 PostgreSQL 全面支持 IPv6 网络协议&#xff0c;包括连接、存储和操作 IPv6 地址。以下是详细说明&#xff1a; 一、网络连接支持 1. 监听 IPv6 连接 在 postgresql.conf 中配置&#xff1a; listen_addresses 0.0.0.0,:: # 监听所有IPv4…...