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

news2024/10/5 14:16:01

目录

  • 背景
  • 理论知识
  • 示例
    • 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.coloradmin.cn/o/816479.html

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

相关文章

关于DC电源模块输入电压范围的问题

BOSHIDA 关于DC电源模块输入电压范围的问题 DC电源模块是一种将交流电转换为直流电的设备&#xff0c;它非常常见且广泛应用于电子设备、通讯设备、工业自动化等领域。而其输入电压范围也是我们在使用和选购DC电源模块时需要特别关注的一个参数。 首先&#xff0c;我们需要了解…

java的空引用null和空字符串““

java中如果字符串变量指向null&#xff0c;表示空引用&#xff0c;此时对字符串求长度会抛出异常。 而""表示一个空字符串&#xff0c;对字符串求长度是可以的&#xff0c;求出来的字符串长度为0。 举例&#xff1a; package com.thb;public class Test6 {public s…

数字电路(一)

1、例题 1、进行DA数模转换器选型时&#xff0c;一般要选择主要参数有&#xff08; A&#xff09;、转换精度和转换速度。 A、分辨率 B、输出电流 C、输出电阻 D、模拟开关 2、下图所示电路的逻辑功能为&#xff08; B&#xff09; A、与门 B、或门 C、与非门 D、或非门 分析该…

导出文件下载进度条简单实现

前言 今天要跟大家分享的是一个导出数据进度条的简单实现&#xff0c;适用场景用在数据量大、组织数据耗时的情况下的简单实现。 一、设计思路 1、导出数据生成文件上传到OSS&#xff0c; 2、导出数据状态存redis缓存&#xff0c; 3、前端发导出请求后&#xff0c;返回的文件k…

Hudi Flink SQL源码调试学习(1)

前言 本着学习hudi-flink源码的目的&#xff0c;利用之前总结的文章Hudi Flink SQL代码示例及本地调试中的代码进行调试,记录调试学习过程中主要的步骤及对应源码片段。 版本 Flink 1.15.4Hudi 0.13.0 目标 在文章Hudi Flink SQL代码示例及本地调试中提到&#xff1a;我们…

分布式事务之本地事务

&#x1f680; 分布式事务 &#x1f680; &#x1f332; AI工具、AI绘图、AI专栏 &#x1f340; &#x1f332; 如果你想学到最前沿、最火爆的技术&#xff0c;赶快加入吧✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;CSDN-Java领域优质创作者&#x1f3c6;&…

大数据课程E1——Flume的概述

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 了解Ganglia的概念&#xff1b; ⚪ 了解Ganglia的拓扑结构和执行流程&#xff1b; ⚪ 掌握Ganglia的安装操作&#xff1b; 一、简介 1. 概述 1. Flume原本是由Cloude…

国内外遥感数据处理软件对比

1.国内遥感数据处理软件概况 1.1北京航天宏图信息技术股份有限公司 1.1.1公司简介 航天宏图信息技术股份有限公司成立于2008年,是国内遥感和北斗导航卫星应用服务商,致力于卫星应用软件国产化、行业应用产业化、应用服务商业化,研发并掌握了具有完全自主知识产权的PIE(Pix…

C# 2的幂

231 2的幂 给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2x &#xff0c;则认为 n 是 2 的幂次方。 示例 1&#xff1a; 输入&#xff1a;n 1 输出&a…

【RabbitMQ】之消息的可靠性方案

目录 一、数据丢失场景二、数据可靠性方案 1、生产者丢失消息解决方案2、MQ 队列丢失消息解决方案3、消费者丢失消息解决方案 一、数据丢失场景 MQ 消息数据完整的链路为&#xff1a;从 Producer 发送消息到 RabbitMQ 服务器中&#xff0c;再由 Broker 服务的 Exchange 根据…

平面设计软件都有哪些?推荐这7款

优秀的平面广告设计可以给产品带来良好的效益&#xff0c;正确传播品牌的价值和色调&#xff0c;而功能强大、使用方便的平面广告设计软件是创造优秀平面广告设计的关键。本文推荐7款备受好评的平面广告设计软件&#xff0c;易于使用&#xff01; 1.即时设计 即时设计是国内一…

HCIP OSPF+BGP综合实验

题目 1、该拓扑为公司网络&#xff0c;其中包括公司总部、公司分部以及公司骨干网&#xff0c;不包含运营商公网部分。 2、设备名称均使用拓扑上名称改名&#xff0c;并且区分大小写。 3、整张拓扑均使用私网地址进行配置。 4、整张网络中&#xff0c;运行OSPF协议或者BGP协议…

jmeter压力测试指标解释

目录 RT(response time) Throughput 吞吐量 并发用户数 QPS (query per seconds) TPS (transition per seconds) PV和UV 聚合报告&#xff1a; RT(response time) 什么是RT? RT就是指系统在接收到请求和做出相应这段时间跨度 但是值得一提的是RT的值越高,并不真的就能…

性能测试必备监控技能linux篇

前言 如果性能测试的目标服务器是linux系统&#xff0c;在如何使用linux自带的命令来实现性能测试过程的监控分析呢&#xff1f; 对于日常性能测试来讲&#xff0c;在linux下或是类Unix系统&#xff0c;我们必须掌握以下常用的指标查看命令。 ps pstree top free vmstat …

Springboot配置文件数据项加密

1 添加依赖 <!-- jasypt-spring-boot-starter --> <dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.2</version> </dependency> 2 加密数…

华为数通HCIA-网络参考模型(TCP/IP)

网络通信模式 作用&#xff1a;指导网络设备的通信&#xff1b; OSI七层模型&#xff1a; 7.应用层&#xff1a;由应用层协议&#xff08;http、FTP、Telnet.&#xff09;为应用程序产生对应的数据&#xff1b; 6.表示层&#xff1a;将应用层产生的数据转换成网络设备看得懂…

CloudDriver一款将各种网盘云盘挂在到电脑本地变成本地磁盘的工具 教程

平时我们的电脑可能由于大量的文件资料之类的导致存储空间可能不够&#xff0c;所以我们可以选择将网盘我们的本地磁盘用来存放东西。 CloudDrive 是一款可以将 115、阿里云盘、天翼云盘、沃家云盘、WebDAV 挂载到电脑中&#xff0c;成为本地硬盘的工具&#xff0c;支持 Window…

Day10-作业(SpringBootWeb案例)

作业1&#xff1a;完成课上预留给大家自己完成的功能 【部门管理的修改功能】 注意&#xff1a; 部门管理的修改功能&#xff0c;需要开发两个接口&#xff1a; 先开发根据ID查询部门信息的接口&#xff0c;该接口用户查询数据并展示 。(一定一定先做这个功能) 再开发根据ID…

543. 二叉树的直径

题目 题解一 遍历每一个节点&#xff0c;以每一个节点为中心点计算最长路径&#xff08;左子树边长右子树边长&#xff09;&#xff0c;更新全局变量max。 class Solution {int maxd0;public int diameterOfBinaryTree(TreeNode root) {depth(root);return maxd;}public int …

苍穹外卖--公共字段自动填充

问题分析 代码冗余&#xff0c;且不便于后期维护。 实现思路 技术点&#xff1a;枚举&#xff0c;注解&#xff0c;AOP&#xff0c;反射 1.自定义注解AutoFill 1.在sky-server.com.sky包下建立annotation&#xff08;注解&#xff09;包 2.在该包下建立注解AutoFill package co…