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

news/2024/5/18 20:10:13/文章来源:https://blog.csdn.net/weixin_45706856/article/details/132016490

目录

  • 背景
  • 理论知识
  • 示例
    • 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.luyixian.cn/news_show_338007.aspx

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

相关文章

链表刷题常用技巧——快慢指针

强大&#xff0c;不动如山的强大&#xff0c;不会输给自己的真正的强大。 往期回顾&#xff1a; 数据结构——单链表 单链表力扣刷题 文章目录 经典例题&#xff1a;链表的中间结点 题目分析及双指针思路引入 双指针图解 leetcode 核心代码 判断环形链表——快慢指针…

基于SSM+JSP+LayUI的校园任务帮管理系统

校园帮项目 校园即时服务平台 用户角色 管理员 功能 登录、公告管理&#xff08;发布公告、停用公告&#xff09;、任务管理&#xff08;下架任务、删除任务&#xff09;、用户管理&#xff08;用户充值、限制用户&#xff09;、修改密码 用户角色 用户 功能 注册、登录…

【Linux进程篇】进程概念(1)

【Linux进程篇】进程概念&#xff08;1&#xff09; 目录 【Linux进程篇】进程概念&#xff08;1&#xff09;进程基本概念描述进程-PCBtask_struct-PCB的一种task_ struct内容分类 组织进程查看进程通过系统调用获取进程标示符通过系统调用创建进程——fork初识 作者&#xff…

Android 中 app freezer 原理详解(二):S 版本

基于版本&#xff1a;Android S 0. 前言 在之前的两篇博文《Android 中app内存回收优化(一)》和 《Android 中app内存回收优化(二)》中详细剖析了 Android 中 app 内存优化的流程。这个机制的管理通过 CachedAppOptimizer 类管理&#xff0c;为什么叫这个名字&#xff0c;而不…

青大数据结构【2016】

一、单选 二、简答 3.简述遍历二叉树的含义及常见的方法。

大数据面试题:HBase的RegionServer宕机以后怎么恢复的?

面试题来源&#xff1a; 《大数据面试题 V4.0》 大数据面试题V3.0&#xff0c;523道题&#xff0c;679页&#xff0c;46w字 可回答&#xff1a;1&#xff09;HBase一个节点宕机了怎么办&#xff1b;2&#xff09;HBase故障恢复 参考答案&#xff1a; 1、HBase常见故障 导…

【构造】CF1758 C

Problem - 1758C - Codeforces 题意&#xff1a; 思路&#xff1a; 思路&#xff1a; #include <bits/stdc.h>#define int long longusing namespace std;const int mxn2e510; const int mxe2e510;int N,x; int ans[mxn];void solve(){cin>>N>>x;if(N%x!0)…

使用MyBatis(2)

目录 一、定义接口、实体类、创建XML文件实现接口&#xff09; 二、MyBatis的增删改查 &#x1f345;1、MyBatis传递参数查询 &#x1f388;写法一 &#x1f388;写法二 &#x1f388;两种方式的区别 &#x1f345;2、删除操作 &#x1f345;3、根据id修改用户名 &#x…

机器学习-Basic Concept

机器学习(Basic Concept) videopptblog Where does the error come from? 在前面我们讨论误差的时候&#xff0c;我们提到了Average Error On Testing Data是最重要的 A more complex model does not lead to better performance on test data Bias And Variance Bias(偏差) …

反转链表(JS)

反转链表 题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&…

三数之和——力扣15

文章目录 题目描述法一 双指针排序 题目描述 法一 双指针排序 class Solution{ public:vector<vector<int>> threeSum(vector<int>& nums){int nnums.size();vector<vector<int>> ans;sort(nums.begin(), nums.end());for(int first0;first&…

死锁产生的原因及解决方案

死锁 1. 死锁的成因2. 解决方案 1. 死锁的成因 互斥条件: 一个资源每次只能被一个进程使用。请求与保持条件&#xff1a;一个进程因请求资源而阻塞时&#xff0c;对已获得的资源保持不放。不可剥夺条件:进程已获得的资源&#xff0c;在末使用完之前&#xff0c;不能强行剥夺。…

PHP8的常量-PHP8知识详解

常量和变量是构成PHP程序的基础&#xff0c;在PHP8中常量的这一节中&#xff0c;主要讲到了定义常量和预定义常量两大知识点。 一、定义常量 定义常量也叫声明常量。在PHP8中&#xff0c;常量就是一个标识符&#xff08;名字&#xff09;&#xff0c;一旦定义&#xff08;声明&…

Vuepress配置Algolia搜索的方法以及避坑指南

今天是2023年高考的第一天&#xff0c;身为高一学生的我也报名去体验了一下&#xff0c;感觉山东今年的语文和数学题都不是很难&#xff08;至少比一模二模都简单&#xff09;&#xff08;当然我的成绩肯定是很糟糕&#xff09; 祝愿所有考生都能取得好成绩&#xff01; 这是什…

Electron逆向调试

复杂程序处理方式&#xff1a; 复杂方式通过 调用窗口 添加命令行参数 启动允许调用&#xff0c;就可以实现调试发布环境的electron程序。 断点调试分析程序的走向&#xff0c;程序基本上会有混淆代码处理&#xff0c; 需要调整代码格式&#xff0c;处理程序。

CopyTranslator-复制即翻译 文献翻译神器 支持多接口翻译

一、软件起源 科研人员总少不了阅读大量文献&#xff0c;理解文献内容就成了科研生活常态&#xff0c;而我们平时复制PDF内容黏贴到网页翻译的时候可能会出现多余换行而导致翻译乱码&#xff0c;译文与中文阅读习惯不符的情况&#xff0c;翻译结果很差&#xff0c;需要手动删除…

vue sku商品规格多选

vue sku商品规格多选 1.创建一个数据对象&#xff0c;用于存储SKU的选中状态。例如&#xff0c;可以使用一个数组来表示选中的SKU&#xff0c;每个元素代表一个SKU选项的id。 data() {return {selectedOptions: []} }2.在SKU选项列表中&#xff0c;使用v-bind:class绑定一个计…

java 阿里云 发送短信功能实现

1. 注册短信平台(以阿里云为例) 常用短信服务平台&#xff1a;阿里云、华为云、腾讯云、京东、梦网、乐信等 2. 注册成功后&#xff0c;开通短信服务 3. 设置短信签名、短信模板、AccessKey AccessKey 是访问阿里云 API 的密钥&#xff0c;具有账户的完全权限&#xff0c;我们…

【Java基础教程】(五十)JDBC篇:JDBC概念及操作步骤、主要类与接口解析、批处理与事务处理~

Java基础教程之JDBC &#x1f539;本章学习目标1️⃣ JDBC概念2️⃣ 连接数据库3️⃣ Statement 接口3.1 数据更新操作3.2 数据查询 4️⃣ PreparedStatement 接口4.1 Statement 接口问题4.2 PreparedStatement操作 5️⃣ 批处理与事务处理&#x1f33e; 总结 &#x1f539;本…

C语言题目总结--操作符运用

&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️ &#x1f4a5;个人主页&#xff1a;&#x1f525;&#x1f525;&#x1f525;大魔王&#x1f525;&#x1f525;&#x1f525; &#x1f4a5;代码仓库&#xff1a;&#x1f525;&#x1f525;魔…