SQL高级语句

news2024/11/19 23:23:01

主知识点八:窗口函数

新开窗口,不影响原数据的排序。且子句必须有order by。窗口结果返回到

且窗口函数必须写在select后面!

●   【排序窗口函数】

●   rank()over()——1,1,3,4

●   dense_rank()over()——1,1,2,3

●   row_number()over()——1,2,3,4

【例题29】查询每一年S14000021选区中所有候选人所在的团体(party)和得票数(votes),并对每一年中的所有候选人根据选票数的高低赋予名次,选票数最高则为1,第二名则为2,后续以此类推,最后根据团体(party)和年份(yr)排序。

分析:

(1)查询团体(party)和得票数(votes)

(2)每一年的,S14000021选区的

(3)每一年中的所有候选人根据选票数的高低赋予名次——窗口函数rank()over(partition by yr order by votes desc)

(4)根据团体(party)和年份(yr)排序。

代码:

select yr,party,votes,rank()over(partition by yr order by votes desc)as posn

from ge

where constituency='S14000021'

order by party,yr

●   【偏移分析函数】

●   lag(字段名,偏移量[,默认值])over()——当前行向上取值“偏移量”行

●   lead(字段名,偏移量[,默认值])over()——当前行向下取值“偏移量”行

●   【例题30】查询法国和德国1月每天新增确诊人数,最后显示国家名、标准日期(2020-01-27)、当天截至时间累计确诊人数、昨天截至时间累计确诊人数、每天新增确诊人数,按照截至时间排序

分析:

(1)法国和德国1月每天新增确诊人数——where name in ('France','Germany') and month(whn) = 1

(2)最后显示国家名、标准日期(2020-01-27)、——date_format(whn,'%Y-%m-%d') date

当天截至时间累计确诊人数、——原表中的confirmed

昨天截至时间累计确诊人数、——,lag(confirmed,1)over(partition by name order by whn),当前行往上取1行,再取这一行的confirmed的值,

每天新增确诊人数

(3)按照截至时间排序

代码:

select

name

,date_format(whn,'%Y-%m-%d') date

,confirmed  当天截至时间累计确诊人数

,lag(confirmed,1)over(partition by name order by whn) 昨天截至时间累计确诊人数

,(confirmed - lag(confirmed,1)over(partition by name order by whn)) 每天新增确诊人数

from covid

where name in ('France','Germany') and month(whn) = 1

order by whn

结果:

●   【总结】

●   【排序窗口函数语法】

●   rank()over([partition by 字段名] order by 字段名 asc|desc)

●   dense_rank()over([partition by 字段名] order by 字段名 asc|desc)

●   row_number()over([partition by 字段名] order by 字段名 asc|desc)

●   【偏移分析函数语法】

●   lag(字段名,偏移量[,默认值])over([partition by 字段名] order by 字段名 asc|desc)

●   lead(字段名,偏移量[,默认值])over([partition by 字段名] order by 字段名 asc|desc)

●   【题目】查询2017年选区为 'S14000024' 的所有候选人所在团体(party)和其选票数(votes)、还有候选人得票数在选区内对应的的排名,结果按团队party排序。

分析:

(1)查询候选人所在团体(party)和其选票数(votes)、

还有候选人得票数在选区内对应的的排名,

(2)2017年选区为 'S14000024' 的 ——where yr=2017 and constituency='S14000024'

(3)结果按团队party排序——order by party

代码:

select party,votes,rank()over(partition by constituency order by votes desc)as sort

from ge

where yr=2017 and constituency='S14000024'

order by party

●   【题目】查询截至时间为2020年4月20日的国家名,确诊人数,确诊人数排名,死亡人数,死亡人数排名,按照确诊人数降序排名。

分析:

(1)查询国家名,确诊人数,确诊人数排名,死亡人数,死亡人数排名,

(2)截至时间为2020年4月20日的

(3)按照确诊人数降序排名。

代码:

select name,confirmed,

rank()over(order by confirmed desc) cr,

deaths,rank()over(order by deaths desc) dr

from covid

where whn='2020-4-20'

order by confirmed desc

●   【题目】查询意大利每周新增确诊数(显示每周一的数值 weekday(whn) = 0),最后显示国家名,标准日期(2020-01-27),每周新增人数,按照截至时间排序。

分析:

(1)查询意大利每周新增确诊数——每周,两个相邻周一的数据相减就是这周的确诊数

(2)显示每周一的数值 weekday(whn) = 0,

(3)最后显示国家名,标准日期(2020-01-27),每周新增人数,

(4)按照截至时间排序。

代码:

select name,date_format(whn,'%Y-%m-%d') date,

(confirmed-lag(confirmed,1)over(partition by name order by whn))

from covid

where weekday(whn)=0 and name = 'Italy'

order by whn

主知识点九:表链接

表链接:把表连接在一起(3种方式)

(1)内连接:只两个表保留相同的

(2)左连接:合并后左边的表所有行都保留,若左边的表有空值则删除(即删除右边没有匹配上的)

(3)右连接:与左相反

●   【基础语法】

●   内连接

select 字段名

from 表名1 inner join 表名2 on 表名1.字段名 =  表名2.字段名

注意内连接inner可以省略,直接使用join默认为内连接

●   左连接

       select 字段名

       from 表名1 left join 表名2 on 表名1.字段名 =  表名2.字段名

●   右连接

       select 字段名

       from 表名1 right join 表名2 on 表名1.字段名 =  表名2.字段名

●   【例题31】查询有球员名叫Mario进球的队伍1(team1),队伍2(team2)及球员姓名.

分析:球员表+比赛表

●   两表连接键分别为id列和matchid列,连接方式为内连接

●   from game join goal on game.id = goal.matchid

代码:

SELECT player,team1,team2

FROM goal inner join game

on game.id = goal.matchid  //不写on可能是完全连接

where player like '%Mario%'

●   【例题32】查询队伍1(team1)的教练是“Fernando Santos”的球队名称(teamname)、比赛日期(mdate)和赛事编号(id)

分析:

要查询的是球队名称(teamname)、比赛日期(mdate)和赛事编号(id)

限制是队伍1(team1),and教练是“Fernando Santos”
代码:

连接键game.team1=eteam.id

SELECT teamname,mdate,game.id                                        //有两个id要区分一下

FROM game join eteam

on game.team1=eteam.id                                                       //筛选队伍1中的教练

where coach='Fernando Santos'

●   【例题33】使用合适的连接显示所有教师及其所教授的科目名

分析:

是所有教师,则要左连接,否则有些老师会被清除,因为有些老师没有教课

代码:

select teacher.name,dept.name as dept

from teacher left join dept

on teacher.dept=dept.id

●   【题目1】查询至少出演过1主角, 30的演员名

代码:      

SELECT name

FROM casting join actor

on casting.actorid=actor.id

where ord=1                                //至少出演过第1主角

group by name                               // 查询的是演员,结果要以演员name 进行分组(group by)

having count(movieid)>=30    

注意:group by字段名:规定依据哪个字段分组聚合,使用该子句是为了依据相同字段值分组后进行聚合运算,常和聚合函数联用

●   【题目2】查询在比赛前十分钟有进球记录的球员,他的队伍编号(teamid),教练(coach), 进球时间(gtime)

分析:

查询的是——队伍编号(teamid),教练(coach), 进球时间(gtime)

限制是——比赛前十分钟有进球记录的

代码:

SELECT teamid,coach,gtime

FROM eteam join goal

on eteam.id = goal.teamid    //不一定是表第一列作为连接

where gtime<=10

●   【题目3】查询每场比赛,每个球队的得分情况,按照以下格式显示。最后按照举办时间(mdate)、赛事编号(matchid)、队伍1(team1)和队伍2(team2)排序。

分析:

(1)得分表goal中出现的teamid就是得分队伍,即出现一次表示得分一次。

(2)每场比赛,每个球队——用group by按照场次、队伍分组

代码:

SELECT mdate,team1,sum(case when ga.team1=go.teamid then 1 else 0 end) score1,

team2,sum(case when ga.team2=go.teamid then 1 else 0 end) score2

FROM game ga

left join goal go

on ga.id = go.matchid

group by mdate,ga.team1,ga.team2

order by mdate,matchid,team1,score1,team2,score2

主知识点十:子查询

套娃逻辑

1、【where基于子查询条件筛选(比较运算符&in关键字)】

●   【例题34】查询出gdp高于欧洲每个国家的所有国家名,有一些国家gdp值可能为NULL,请排除这些国家。

分析:

(1)gdp高于欧洲每个国家,即gdp高于欧洲gdp最大的国家

先查出这个GDP最大的国家,然后再大于这个国家就好了

(2)请排除国家gdp值可能为NULL——is not null

代码:

select name

from world

where gdp is not null

and gdp>

( //返回最大gdp给上面的判断

select max(gdp) from world where continent = 'Europe'

)

2、【from基于子查询作为数据表】

● 【例题36】查询2017年所有在爱丁堡的选区当选议员所在选区(constituency)及其团队(party),已知爱丁堡选区编号为S14000021至S14000026,当选议员即各选区得票数最高的候选人。

分析:

(1)要查询:当选议员所在选区(constituency)及其团队(party)

(2)限制是:2017年,所有,在爱丁堡的(编号为S14000021至S14000026)

(3)当选议员:选区得票数最高的候选人

代码1:

select yr,constituency,party,votes,

rank()over(partition by constituency order by votes desc) as pson

from ge

where yr = 2017

and constituency between 'S14000021' and 'S14000026'

以上代码可以找到2017年在爱丁堡选区,和票数的排名

再from从上面这个【表】中把pson=1 的筛选出来就好了:先将表另存为,再where 表.pson=1.

select constituency,party

from

(

select yr,constituency,party,votes,

rank()over(partition by constituency order by votes desc) as pson

from ge

where yr = 2017

and constituency between 'S14000021' and 'S14000026'

)data

where data.pson=1

●   【总结】

●   子查询本身是一个完整的查询,由括号包裹嵌套在主查询中

●   子查询最后返回查询出的结果给主查询

●   子查询可以在select,from,where,having子句(同where)中使用,但要注意不同子句能接受的子查询种类有差别

●   子查询可以多重嵌套(子查询可以作为主查询再嵌套子查询)

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

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

相关文章

macOS Sonoma 14.5(23F79)发布

系统介绍 黑果魏叔5 月 14 日快报&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 14.5 正式版更新&#xff08;内部版本号&#xff1a;23F79 同 RC&#xff09;。这是去年 9 月发布的 macOS Sonoma 操作系统的第五次更新&#xff0c;距离上一次的 macOS Sonoma 14.4 更新已…

从CSDN搬家到微信公众号

博主将会在微信公众号里不断输出精品内容&#xff0c;陪伴大家共同成长。 如果你对博主的经历感兴趣&#xff0c;或者对博主的IT技术感兴趣&#xff0c;欢迎关注我的微信公众号&#xff0c;阅读我的技术文章&#xff0c;免费获取各种IT资源。也可以加我的微信成为我的好友&…

性能测试学习二

瓶颈的精准判断 TPS曲线 tps图 响应时间图 拐点在哪里呢? 这是一个阶梯式增加的场景,拐点在第二个压力阶梯上就出现了,因为响应时间增加了,tps增加的却不多,在第三个阶段时,tps增加的就更少了,响应时间也在不断增加,所以性能瓶颈在加剧,越往后越明显【tps的增长,…

线程纵横:C++并发编程的深度解析与实践

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的Linux高性能服务器编程系列之《线程纵横&#xff1a;C并发编程的深度解析与实践》&#xff0c;在这篇文章中&#xff0c;你将会学习到C新特性&#xff0c;并发编程&#xff0c;以及其如何带来的高性能的魅力&#xff0…

汇聚荣电商:拼多多开店需要多少费用?

想要在拼多多这个巨大的电商平台上开一家属于自己的店铺&#xff0c;很多创业者都会关心一个问题&#xff1a;开店需要多少费用?答案并不复杂&#xff0c;但背后的经营哲学和策略却值得深究。接下来&#xff0c;让我们从四个不同的方面来详细探讨这个问题。 一、开店成本分析 …

JSON在线解析及格式化验证 - JSON.cn网站

JSON在线解析及格式化验证 - JSON.cn https://www.json.cn/

Context Pattern上下文模式

使用情景 全局使用的配置&#xff0c;数据库的连接。MVC中的跨层数据传输携带请求ID&#xff0c;用户信息等用户权限信息线程上下文 跨层数据共享 统一调用参数 携带多个事务需要处理的对象 携带用户信息 使用ThreadLocal

【哔哩哔哩下载】Bilidown,B站下载工具网站,永久免费使用NO.98

本文一共:448 个字,需要阅读:2 分钟,更新时间:2024年5 月14日,部分内容具有时效性,如有失效请留言,阅读量:0 输入B站视频网址就可以下载了 除了可以下载视频&#xff0c;还能获取弹幕、查看封面&#xff0c;如果你想解锁1080P画质&#xff0c;就需要扫码登录。 点击右下角的齿…

【JavaWeb】Day77.Spring——SpringBoot原理(一)

SpringBoot原理 Spring是目前世界上最流行的Java框架&#xff0c;它可以帮助我们更加快速、更加容易的来构建Java项目。而在Spring家族当中提供了很多优秀的框架&#xff0c;而所有的框架都是基于一个基础框架的SpringFramework(也就是Spring框架)。而如果我们直接基于Spring框…

我和jetson-Nano的故事(10)——安装OpenCV3.2.0

1. 仓库地址 opencv https://opencv.org/releases/page/6/opencv_contrib https://github.com/opencv/opencv_contrib/tree/3.2.0 2. cmake-gui安装 安装指令 sudo apt-get install cmake-qt-gui如果安装过程中入到下面的问题 可以按照以下方法解决 sudo apt --fix-broke…

全方位入门git-慕课网 笔记

目录 【上传github忽略某些文件】【配置用户名和邮箱】【想要删除不需要的文件时如何进行操作】【想要给文件重命名如何操作】【想要移动文件到其他位置时如何操作】【文件有变化时&#xff0c;如何查看前后变化】【操作失误的情况下如何实现一键还原】【不再追踪时如何实现撤销…

css如何实现边框模糊的效果

其实并不难&#xff0c;用属性 filter: blur(数字px); 即可。效果如下&#xff1a; 图上的圆形内有色彩的渐变&#xff0c;同样也是用filter: blur(数字px); 实现的&#xff0c;代码如下&#xff1a;、 <template><div id"root" :style"{}">…

MM模块学习二 (供应商,物料后台相关配置)

公司代码配置 新建条目&#xff08;只是建了一个名字出来&#xff0c;后面很多表都是没有得&#xff09; 接下来定义公司代码&#xff1a; 公司代码复制完成&#xff08;后续修改交给财务顾问去做&#xff09; 复制工厂&#xff1a; 复制工厂完成&#xff1a; 修改复制过去的工…

【C++】priority_queues(优先级队列)和反向迭代器适配器的实现

目录 一、 priority_queue1.priority_queue的介绍2.priority_queue的使用2.1、接口使用说明2.2、优先级队列的使用样例 3.priority_queue的底层实现3.1、库里面关于priority_queue的定义3.2、仿函数1.什么是仿函数&#xff1f;2.仿函数样例 3.3、实现优先级队列1. 1.0版本的实现…

车载GPT爆红前夜:一场巨头竞逐的游戏

在基于GPT-3.5的ChatGPT问世之前&#xff0c;OpenAI作为深度学习领域并不大为人所看好的技术分支玩家&#xff0c;已经在GPT这个赛道默默耕耘了七八年的时间。 好几年的时间里&#xff0c;GPT始终没有跨越从“不能用”到“能用”的奇点。转折点发生在2020年6月份发布的GPT-3&a…

使用XxlCrawler抓取全球航空公司ICAO三字码

目录 前言 一、数据源介绍 1、目标网站 2、页面渲染结构 二、XxlCrawler信息获取 1、创建XxlCrawler对象 2、定义PageVo对象 3、直接PageVO解析 4、自定义解析 总结 前言 长距离旅行或者出差&#xff0c;飞机一定是出行的必备方式。对于旅行达人或者出差人员而言&…

刷题之最长连续序列

哈希表 class Solution { public:int longestConsecutive(vector<int>& nums) {//set记录并且去重nums中的数unordered_set<int>set;for(int i0;i<nums.size();i){set.insert(nums[i]);}int result0;//遍历所有数for(auto iset.begin();i!set.end();i){//如…

go语言基础1

1.token token是构成源程序的基本不可在分割单元。编译器编译源程序的第一步就是将源程序分割为一个个独立的token&#xff0c;这个过程就是词法分析。Go语言的token可以分为关键字、标识符、操作符、分隔符和字面常量等&#xff0c;如图所示&#xff1a; Go token分隔符有两类…

Element-UI 快速入门指南

文章目录 一、安装 Element-UI1.1 使用 npm 安装1.2 使用 yarn 安装 二、引入 Element-UI三、使用 Element-UI 组件3.1 按钮组件3.2 输入框组件3.3 表单组件3.4 表格组件3.5 弹框组件 四、自定义主题4.1 安装主题工具4.2 初始化变量文件4.3 编译主题 五、总结 &#x1f389;欢迎…

5.12.1 Detecting and classifying lesions in mammograms with Deep Learning

计算机辅助检测 (CAD) 系统的开发是为了帮助放射科医生分析筛查性乳房 X 光检查&#xff0c;深度 CNN 有可能彻底改变医学图像分析。我们提出了一种基于最成功的对象检测框架之一 Faster R-CNN 的 CAD 系统。该系统无需任何人为干预即可检测乳房 X 光照片上的恶性或良性病变并对…