深入理解 SQL:从基本查询到高级聚合

目录

  • 背景
  • 理论知识
  • 示例
    • 1211. 查询结果的质量和占比(Round group by)
    • 1204. 最后一个能进入巴士的人 (Having limit order by)
    • 1193. 每月交易 I(if group by)
    • 1179. 重新格式化部门表
    • 1174. 即时食物配送 II(子查询)
    • 1164. 指定日期的产品价格(union groupby having)
  • 总结

背景

7月leetcode 中 sql集训

理论知识

SQL(Structured Query Language)是一种用于管理和操作关系型数据库的标准化语言。无论是在日常开发中还是数据分析领域,SQL都扮演着重要的角色。本博客将带您深入理解SQL,并探索从基本查询到高级聚合的关键概念。

  1. SELECT语句:从表中选择数据
    SQL的核心是SELECT语句,它用于从数据库表中检索数据。SELECT语句的基本结构如下:
Copy code
SELECT 列名1, 列名2, ...
FROM 表名;

使用SELECT语句,我们可以从表中获取所需的列,并可选地应用过滤条件。

  1. WHERE子句:筛选数据
    WHERE子句用于对SELECT语句的结果进行筛选,只返回满足特定条件的数据。
SELECT 列名1, 列名2, ...
FROM 表名
WHERE 条件;

条件可以是比较运算符(例如:=, <, >, <=, >=, <>)或逻辑运算符(例如:AND, OR, NOT)。通过WHERE子句,我们可以获取符合特定条件的数据行。

  1. ORDER BY子句:排序数据
    ORDER BY子句用于对SELECT语句的结果进行排序,可以按照一个或多个列进行升序或降序排列。
SELECT 列名1, 列名2, ...
FROM 表名
ORDER BY 列名1 ASC/DESC, 列名2 ASC/DESC, ...;

这样,我们可以以特定的顺序获取数据,使其更容易理解和分析。

  1. 聚合函数:统计和分析数据
    SQL提供了一组强大的聚合函数,用于对数据进行汇总和分析。

常见的聚合函数包括:

COUNT:统计行数
SUM:计算总和
AVG:计算平均值
MAX:找到最大值
MIN:找到最小值

SELECT COUNT(*), SUM(销售额), AVG(利润)
FROM 销售表;
  1. GROUP BY子句:分组汇总数据
    GROUP BY子句用于对数据进行分组,并在每个分组上应用聚合函数。
SELECT 列名1, 列名2, 聚合函数1, 聚合函数2, ...
FROM 表名
GROUP BY 列名1, 列名2;

通过GROUP BY,我们可以对数据按照指定的列进行分组,并获得每个分组的汇总结果。

  1. HAVING子句:过滤分组后的数据
    HAVING子句用于对GROUP BY子句生成的分组结果进行筛选,类似于WHERE子句,但WHERE用于筛选行,HAVING用于筛选分组。
SELECT 列名1, 列名2, 聚合函数1, 聚合函数2, ...
FROM 表名
GROUP BY 列名1, 列名2
HAVING 条件;
  1. JOIN操作:联结多个表
    JOIN操作用于在多个表之间建立连接,并获得来自不同表的相关信息。

常见的JOIN类型包括:

INNER JOIN:获取两个表中匹配的行
LEFT JOIN:获取左表中所有行和右表中匹配的行
RIGHT JOIN:获取右表中所有行和左表中匹配的行
FULL JOIN:获取所有表中匹配的行

SELECT 列名1, 列名2, ...
FROM 表名1
JOIN 表名2 ON 表名1.列名 = 表名2.列名;
  1. 子查询:嵌套查询
    子查询是指在SELECT语句中嵌套另一个SELECT语句,用于解决复杂的查询需求。
SELECT 列名1, 列名2, ...
FROM 表名
WHERE 列名 IN (SELECT 列名 FROM 表名 WHERE 条件);

子查询可以嵌套多层,使得我们能够在一个查询中获取更具体和复杂的结果。

示例

1211. 查询结果的质量和占比(Round group by)

在这里插入图片描述

select query_name,
ROUND(AVG(rating/position),2) 'quality',
ROUND(avg(rating < 3)*100,2) 'poor_query_percentage' 
from queries group by query_name;

1204. 最后一个能进入巴士的人 (Having limit order by)

在这里插入图片描述

SELECT a.person_name
FROM Queue a, Queue b
WHERE a.turn >= b.turn
GROUP BY a.person_id 
HAVING SUM(b.weight) <= 1000
ORDER BY a.turn DESC
LIMIT 1

1193. 每月交易 I(if group by)

在这里插入图片描述

SELECT 
      DATE_FORMAT(trans_date,'%Y-%m') AS month,
      country,
      COUNT(id) AS trans_count,
      COUNT(IF(state = 'approved',id,null)) AS approved_count,
      SUM(amount) AS trans_total_amount,
      SUM(IF(state = 'approved',amount,0)) AS approved_total_amount  
FROM Transactions
GROUP BY country,DATE_FORMAT(trans_date,'%Y-%m') 

1179. 重新格式化部门表

在这里插入图片描述

select distinct id,
    sum(IF(month="Jan",revenue,null)) as Jan_Revenue,
    sum(IF(month="Feb",revenue,null)) as Feb_Revenue,
    sum(IF(month="Mar",revenue,null)) as Mar_Revenue,
    sum(IF(month="Apr",revenue,null)) as Apr_Revenue,
    sum(IF(month="May",revenue,null)) as May_Revenue,
    sum(IF(month="Jun",revenue,null)) as Jun_Revenue,
    sum(IF(month="Jul",revenue,null)) as Jul_Revenue,
    sum(IF(month="Aug",revenue,null)) as Aug_Revenue,
    sum(IF(month="Sep",revenue,null)) as Sep_Revenue,
    sum(IF(month="Oct",revenue,null)) as Oct_Revenue,
    sum(IF(month="Nov",revenue,null)) as Nov_Revenue,
    sum(IF(month="Dec",revenue,null)) as Dec_Revenue
    from Department group by id ;

1174. 即时食物配送 II(子查询)

在这里插入图片描述

select 
round(sum(order_date = customer_pref_delivery_date)/count(*)*100,2) immediate_percentage
from Delivery
where (customer_id,order_date) in 
(select customer_id,min(order_date) from Delivery group by customer_id)

1164. 指定日期的产品价格(union groupby having)

在这里插入图片描述

select t.product_id, t.new_price as price
from (select *, row_number() over (PARTITION BY product_id order by change_date desc) as row_num
from Products
where change_date<='2019-08-16') as t
where t.row_num=1

union

select product_id, 10 as price 
from Products 
group by product_id
having min(change_date)>'2019-08-16'

总结

SQL是一种强大且灵活的语言,它能够帮助我们轻松地管理和分析数据库中的数据。了解基本查询、过滤、聚合以及联结多个表等操作,将使您在应用开发和数据分析领域更具优势。随着不断练习和深入学习SQL,我已经驾轻就熟了。你也试试吧

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jenkins 配置git

在linux 中输入 保证git 安装成功 git --version使用查看git 安装目录&#xff08;非源码安装直接用yum 安装的&#xff09; which gitjenkins 中到 系统管理–>全局工具配置–> Git installations 新建一个项目 选择自由风格 源码管理选择 git 如果使用的是码云&a…

【机器学习】Overfitting and Regularization

Overfitting and Regularization 1. 过拟合添加正则化2. 具有正则化的损失函数2.1 正则化线性回归的损失函数2.2 正则化逻辑回归的损失函数 3. 具有正则化的梯度下降3.1 使用正则化计算梯度&#xff08;线性回归 / 逻辑回归&#xff09;3.2 正则化线性回归的梯度函数3.3 正则化…

论文笔记--GloVe: Global Vectors for Word Representation

论文笔记--GloVe: Global Vectors for Word Representation 1. 文章简介2. 文章概括3 文章重点技术3.1 两种常用的单词向量训练方法3.2 GloVe3.3 模型的复杂度 4. 文章亮点5. 原文传送门6. References 1. 文章简介 标题&#xff1a;GloVe: Global Vectors for Word Representa…

计算机图形学笔记2-Viewing 观测

观测主要解决的问题是如何把物体的三维“模型”变成我们在屏幕所看到的二维“图片”&#xff0c;我们在计算机看到实体模型可以分成这样几步&#xff1a; 相机变换(camera transformation)或眼变换(eye transformation)&#xff1a;想象把相机放在任意一个位置来观测物体&#…

OSPF协议RIP协议+OSPF实验(eNSP)

本篇博客主要讲解单区域的ospf&#xff0c;多区域的仅作了解。 目录 一、OSPF路由协议概述 1.内部网关协议和外部网关协议 二、OSPF的应用环境 1.从以下几方面考虑OSPF的使用 2.OSPF的特点 三、OSPF重要基本概念 3.1&#xff0c;辨析邻居和邻接关系以及七种邻居状态 3…

MySQL中的函数

系列文章目录 MySQL常见的几种约束 文章目录 系列文章目录前言一、单行函数1.字符串函数 &#xff08;String StringBuilder&#xff09;2.数值函数 &#xff08;Math&#xff09;3.日期与时间函数4.流程函数&#xff08; IF SWITCH&#xff09;5.JSON函数6.其他函数 二、多行…

shopee,lazada,etsy店群如何高效安全的管理

对于电商卖家来说&#xff0c;要经营多个店铺&#xff0c;管理多个账号是非常常见的操作。为了避免账号关联被平台识别出来&#xff0c;需要使用防关联的浏览器来进行操作 ​1、支持多平台 支持同时管理多个电商平台店铺&#xff0c;Shopee、Lazada、etsy、poshmark、vinted等&…

Pytorch 最全入门介绍,Pytorch入门看这一篇就够了

本文通过详细且实践性的方式介绍了 PyTorch 的使用&#xff0c;包括环境安装、基础知识、张量操作、自动求导机制、神经网络创建、数据处理、模型训练、测试以及模型的保存和加载。 1. Pytorch简介 在这一部分&#xff0c;我们将会对Pytorch做一个简单的介绍&#xff0c;包括它…

MFC第二十四天 使用GDI对象画笔和画刷来开发控件(分页控件选择态的算法分析、使用CToolTipCtrl开发动静态提示)

文章目录 GDI对象画笔和画刷来开发控件梯形边框的按钮控件CMainDlg.hCMainDlg.cppCLadderCtrl.hCLadderCtrl.cpp 矩形边框的三态按钮控件 CToolTipCtrl开发动静态提示CMainDlg.hCMainDlg.cppCLadderCtrl.hCLadderCtrl.cpp: 实现文件 矩形边框的三态按钮控件 CToolTipCtrl开发动…

华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(六)

系列文章目录 个人简介&#xff1a;机电专业在读研究生&#xff0c;CSDN内容合伙人&#xff0c;博主个人首页 Python面试专栏&#xff1a;《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读&#xff0c;一起进步&#xff01;&#x1f31f;&#x1f31f;&#x1f31f; …

echart折线图,调节折线点和y轴的间距(亲测可用)

options代码&#xff1a; options {tooltip: {trigger: axis, //坐标轴触发&#xff0c;主要在柱状图&#xff0c;折线图等会使用类目轴的图表中使用。},xAxis: {type: category,//类目轴&#xff0c;适用于离散的类目数据&#xff0c;为该类型时必须通过 data 设置类目数据。…

抓紧收藏,Selenium无法定位元素的几种解决方案

01、frame/iframe表单嵌套 WebDriver只能在一个页面上对元素识别与定位&#xff0c;对于frame/iframe表单内嵌的页面元素无法直接定位。 解决方法&#xff1a; driver.switch_to.frame(id/name/obj) switch_to.frame()默认可以直接取表单的id或name属性。如果没有可用的id和…

自适应大屏

可视化大屏适配/自适应现状 可视化大屏的适配是一个老生常谈的话题了&#xff0c;现在其实不乏一些大佬开源的自适应插件、工具但是我为什么还要重复造轮子呢&#xff1f;因为目前市面上适配工具每一个都无法做到完美的效果&#xff0c;做出来的东西都差不多&#xff0c;最终实…

ETHERNET/IP 转ETHERCAT连接ethercat总线伺服如何控制

捷米JM-EIP-ECAT网关连接到ETHERNET/IP总线中做为从站使用&#xff0c;连接到ETHERCAT总线中做为从站使用&#xff0c;可以同时满足多种工业生产的需求。支持广泛的设备类型&#xff0c;可以和多种不同的设备进行通讯。 技术参数 ETHERNET/IP 技术参数 网关做为 ETHERNET/IP …

CentOS下 Docker、Docker Compose 的安装教程

Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口。 Docker Compose是用于定义…

一些类型推导相关的功能(C++)

目录 auto关键的新用法&#xff08;C11起&#xff09; 背景介绍 用法示例 注意事项 typeid运算符 type_info类 typeid的用法 decltype运算符 用法阐述 用法示例 用法建议 function类模板 用法阐述 用法示例 function较函数指针的优势 std::function和decltype的…

DID以及社交网络中的ZKP

1. 引言 本文关键术语为&#xff1a; Decentralized Identity (DID&#xff0c;去中心化身份) or self-sovereign identity (SSI&#xff0c;自治身份) &#xff1a;是一个基于开放标准的框架&#xff0c;使用自主、独立的标识符和可验证证书&#xff0c;实现可信的数据交换。…

Vue2 第六节 key的作用与原理

&#xff08;1&#xff09;虚拟DOM &#xff08;2&#xff09;v-for中的key的作用 一.虚拟DOM 1.虚拟DOM就是内存中的数据 2.原生的JS没有虚拟DOM: 如果新的数据和原来的数据有重复数据&#xff0c;不会在原来的基础上新加数据&#xff0c;而是重新生成一份 3. Vue会有虚拟…

驶向专业:嵌入式开发在自动驾驶中的学习之道

导语: 自动驾驶技术在汽车行业中的快速发展为嵌入式开发领域带来了巨大的机遇。作为自动驾驶的核心组成部分&#xff0c;嵌入式开发在驱动汽车的智能化和自主性方面发挥着至关重要的作用。本文将探讨嵌入式开发的学习方向、途径以及未来在自动驾驶领域中的展望。 一、学习方向:…

3ds MAX绘制茶壶

综合一下之前的内容画个茶壶 长方形&#xff0c;然后转化为可编辑多边形&#xff0c;添加节点并设置圆角&#xff0c;如下图 车削生成一个圆环&#xff0c;其实这一步也可以用一个圆柱体和两个圆角圆柱体解决 效果如下&#xff1a; 茶壶的底座绘制好了 接下来是茶壶的上半边 …