深入理解 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_Revenuefrom 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=1unionselect product_id, 10 as price 
from Products 
group by product_id
having min(change_date)>'2019-08-16'

总结

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

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

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

相关文章

JVM总结笔记

JVM JVM是什么?JVM 的主要组成部分JVM工作流程JVM内存模型直接内存与堆内存的区别&#xff1a;堆栈的区别Java会存在内存泄漏吗&#xff1f;简述Java垃圾回收机制垃圾收集算法轻GC(Minor GC)和重GC(Full GC)新生代gc流程JVM优化与JVM调优 JVM是什么? JVM是Java Virtual Mach…

Linux操作系统2-软件的安装

软件安装方式 二进制发布包安装 软件已针对具体平台编译打包&#xff0c;只需要解压、修改配置rpm安装 安装按照redhat的包管理规范进行打包&#xff0c;使用rpm命令进行安装&#xff0c;不能自行解决库依赖问题yum安装 一种在线软件安装方式&#xff0c;本质上还是rpm安装&am…

【LeetCode每日一题】——766.托普利茨矩阵

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【题目进阶】八【解题思路】九【时间频度】十【代码实现】十一【提交结果】 一【题目类别】 矩阵 二【题目难度】 简单 三【题目编号】 766.托普利茨矩阵 四【题目描述…

使用Roles模块搭建LNMP架构

使用Roles模块搭建LNMP架构 1.Ansible-playbook中部署Nginx角色2.Ansible-playbook中部署PHP角色3.Ansible-playbook中部署MySQL角色4.启动安装分布式LNMP 1.Ansible-playbook中部署Nginx角色 创建nginx角色所需要的工作目录&#xff1b; mkdir -p /etc/ansible/playbook/rol…

react中的高阶组件理解与使用

一、什么是高阶组件&#xff1f; 其实就是一个函数&#xff0c;参数是一个组件&#xff0c;经过这个函数的处理返回一个功能增加的组件。 二、代码中如何使用 1&#xff0c;高级组件headerHoc 2&#xff0c;在普通组件header中引入高阶组件并导出高阶组件&#xff0c;参数是普…

Leetcode | DP | 338. 198. 139.

338. Counting Bits 重点在于这张图。 从i1开始&#xff0c;dp的array如果i是2的1次方之前的数&#xff0c;是1 dp[i - 2 ^ 0]; 如果i是2的2次方之前的数&#xff0c;是1 dp[i - 2 ^ 1]; 如果i是2的3次方之前的数&#xff0c;是1 dp[i - 2 ^ 2]; 198. House Robber 如果…

zookeeper学习(三)基础数据结构

数据模型 在 zookeeper 中&#xff0c;可以说 zookeeper 中的所有存储的数据是由 znode 组成的&#xff0c;节点也称为 znode&#xff0c;并以 key/value 形式存储数据。 整体结构类似于 linux 文件系统的模式以树形结构存储。其中根路径以 / 开头。 进入 zookeeper 安装的 …

【机器学习】Gradient Descent for Logistic Regression

Gradient Descent for Logistic Regression 1. 数据集&#xff08;多变量&#xff09;2. 逻辑梯度下降3. 梯度下降的实现及代码描述3.1 计算梯度3.2 梯度下降 4. 数据集&#xff08;单变量&#xff09;附录 导入所需的库 import copy, math import numpy as np %matplotlib wi…

CompletableFuture 详解

目录 简单介绍 常见操作 创建 CompletableFuture new 关键字 静态工厂方法 处理异步结算的结果 简单介绍 CompletableFuture 同时实现了 Future 和 CompletionStage 接口。 public class CompletableFuture<T> implements Future<T>, CompletionStage<T…

selenium-web自动化测试

一、selenium环境部署 1.准备chrome浏览器&#xff08;其他浏览器也行&#xff09; 2.准备chrome驱动包 步骤一&#xff1a;查看自己的谷歌浏览器版本(浏览器版本和驱动版本一定要对应) 步骤二&#xff1a;下载对应的驱动包, 下载路径 : ChromeDriver - WebDriver for Chrom…

初识IDA工具

工具 IDA工具 链接&#xff1a;https://pan.baidu.com/s/1Zgzpws6l2M5j1wkCZHrffw 提取码&#xff1a;ruyu 里面有安装密码&#xff1a; PassWord:qY2jts9hEJGy 里面分析32位和64位启动快捷方式 打开IDA工具&#xff0c;拖入so文件 ARM AND THUMB MODE SWITCH INSTRUCTION…

PyTorch BatchNorm2d详解

通常和卷积层&#xff0c;激活函数一起使用

视频传输网安全防护体系

在电脑、手机信息安全保护得到广泛关注和普及的今天&#xff0c;监控摄像头等设备的安全防护仍为大众所忽略&#xff0c;大量视频监控网络的前端设备和数据没有任何保护&#xff0c;完全暴露在互联网中。 前端IP接入设备与后端业务系统处于直连状态&#xff0c;一旦有攻击者或…

spring boot项目整合spring security权限认证

一、准备一个spring boot项目 1、引入基础依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.sp…

自定义类型讲解

&#x1f495;痛苦难道是白忍受的吗&#xff1f;&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;自定义类型讲解 一.结构体 定义&#xff1a; 数组&#xff1a;多组相同类型元素的集合 结构体&#xff1a;多组不同类型元素的集合-->管理多组不同类型数据…

计算机视觉实验:人脸识别系统设计

实验内容 设计计算机视觉目标识别系统&#xff0c;与实际应用有关&#xff08;建议&#xff1a;最终展示形式为带界面可运行的系统&#xff09;&#xff0c;以下内容选择其中一个做。 1. 人脸识别系统设计 (1) 人脸识别系统设计&#xff08;必做&#xff09;&#xff1a;根据…

tinkerCAD案例:24. Ruler - Measuring Lengths 标尺 -量勺

tinkerCAD案例&#xff1a;24. Ruler - Measuring Lengths 标尺 - 测量长度 Project Overview: 项目概况&#xff1a; A machine shop, where any idea can become a reality, can cost millions and million of dollars. Still, the most important tool in the shop is the…

vue-cli4升级到vue-cli5的踩坑记录

前言 最近对部分项目升级了vue-cli脚手架&#xff0c;记录一下 问题一&#xff1a; scss/less/css中无法引入public下的静态资源 问题描述 在样式文件中使用静态资源路径导致编译无法通过 错误信息如下&#xff1a; Module not found: Error: Cant resolve /img/login/lo…

小研究 - 主动式微服务细粒度弹性缩放算法研究(二)

微服务架构已成为云数据中心的基本服务架构。但目前关于微服务系统弹性缩放的研究大多是基于服务或实例级别的水平缩放&#xff0c;忽略了能够充分利用单台服务器资源的细粒度垂直缩放&#xff0c;从而导致资源浪费。为此&#xff0c;本文设计了主动式微服务细粒度弹性缩放算法…

Android 面试题 应用程序结构 十

&#x1f525; Intent 传递数据 &#x1f525; Activity、Service、BroadcastReceiver之间的通信载体 Intent 来传递数据。而ContentProvider则是共享文件。 Intent可传递的数据类型&#xff1a; a. 8种基本数据类型&#xff08;boolean byte char short int long float double…