SQL高级语句

主知识点八:窗口函数

新开窗口,不影响原数据的排序。且子句必须有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 posnfrom gewhere 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)按照截至时间排序

代码:

selectname,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 covidwhere name in ('France','Germany') and month(whn) = 1order 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 sortfrom gewhere 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) drfrom covidwhere 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 covidwhere 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,team2FROM goal inner join gameon 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.idSELECT teamname,mdate,game.id                                        //有两个id要区分一下FROM game join eteamon game.team1=eteam.id                                                       //筛选队伍1中的教练where coach='Fernando Santos'

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

分析:

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

代码:

select teacher.name,dept.name as deptfrom teacher left join depton teacher.dept=dept.id

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

代码:      

SELECT nameFROM casting join actoron casting.actorid=actor.idwhere 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,gtimeFROM eteam join goalon 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) score2FROM game galeft join goal goon ga.id = go.matchidgroup by mdate,ga.team1,ga.team2order 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 namefrom worldwhere gdp is not nulland 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 psonfrom gewhere yr = 2017and constituency between 'S14000021' and 'S14000026'

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

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

select constituency,partyfrom(select yr,constituency,party,votes,rank()over(partition by constituency order by votes desc) as psonfrom gewhere yr = 2017and constituency between 'S14000021' and 'S14000026')datawhere data.pson=1

●   【总结】

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

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

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

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

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

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

相关文章

初识java——javaSE(4)类与对象

文章目录 前言一 类与对象1.1 面向过程与面向对象思想的区别&#xff1a;1.2 类的定义1.3 类的实例化——对象通过创建对象&#xff0c;调用对象中的成员变量与方法 1.4 this关键字this的作用一&#xff1a;this 的作用二构造方法&#xff1a;对象创建的两步方法的重载 this的作…

干部谈话考察:精准洞悉,助推成长

在组织人事管理的精细布局中&#xff0c;干部谈话考察扮演着举足轻重的角色。它不仅是组织深度了解干部、精准评价其表现的重要窗口&#xff0c;更是推动干部个人成长、优化组织人才配置的关键一环。通过深入的谈话考察&#xff0c;我们能够全面把握干部的思想脉搏、工作能力、…

人武部三维电子沙盘系统

深圳易图讯科技有限公司(www.3dgis.top)系统采用自主可控高性能可视化三维GIS引擎&#xff0c;支持多用户客户端通过网络请求访问服务器地图和JFQ专题数据&#xff0c;提供地理信息数据、专题数据的并发访问和高效调度加载&#xff0c;依托前端设备采集的重点图像、视频等信息资…

代码随想录day19day20打卡

二叉树 1 二叉树的最大深度和最小深度 最大深度已经学习过了&#xff0c;实质就是递归的去判断左右子节点的深度&#xff0c;然后对其进行返回。 附加两个学习的部分&#xff1a; &#xff08;1&#xff09;使用前序遍历的方法求解 int result; void getdepth(TreeNode* nod…

华为OD机试 - 测试用例执行计划(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

麒麟 V10 安装docker2

1. 查看系统版本 2.安装docker-ce 添加源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安装docker yum install docker-ce --allowerasing 重启docker systemctl start docker 3.安装nvidia-container-runtime 添…

04-单片机商业项目编程,从零搭建低功耗系统设计

一、本文内容 上一节《03-单片机商业项目编程&#xff0c;从零搭建低功耗系统设计-CSDN博客》我们确定了设计思路&#xff0c;并如何更有效的保持低功耗&#xff0c;这节我们就准备来做软件框架设计。在AI飞速发展的时代&#xff0c;我们也会利AI来辅助我们完成&#xff0c;让自…

网络工程师----第二十八天

计算机基础 第五章&#xff1a;运输层 运输层的两个协议&#xff1a; 1、传输控制协议TCP&#xff1a; TCP最主要的特点&#xff1a; (1)TCP是面向连接的。应用程序在使用TCP协议之前&#xff0c;必须先建立连接。在传送数据完毕后&#xff0c;必须释放已经建立的TCP连接。…

大语言模型的RAG:综述

23年12月同济大学和复旦大学的综述论文“Retrieval-Augmented Generation for Large Language Models: A Survey”。 大语言模型&#xff08;LLM&#xff09;展示了强大的功能&#xff0c;但在实际应用中仍然面临挑战&#xff0c;如幻觉、知识更新缓慢以及答案缺乏透明度。检索…

怎么转换音频?看这3款音频转换器

随着数字媒体的发展&#xff0c;音频文件在我们的日常生活中占据了越来越重要的地位。有时候在不同的应用场景里&#xff0c;无论是音乐、语音还是其他类型的音频内容&#xff0c;我们都需要对其进行转换以满足不同的需求。 本文将为您介绍3款常用的音频转换器&#xff0c;帮助…

MHD093C-058-PG1-AA具备哪些特点?

MHD093C-058-PG1-AA是一种高性能的伺服电机控制器。 该产品具备以下特点&#xff1a; 高精度与高性能&#xff1a;MHD093C-058-PG1-AA设计用于提供精确的运动控制和定位&#xff0c;适用于需要高精度定位和控制的场合。快速响应&#xff1a;采用先进的控制技术&#xff0c;确…

Memcached

一、NoSQL介绍 NoSQL是对 Not Only SQL、非传统关系型数据库的统称。 NoSQL一词诞生于1998年&#xff0c;2009年这个词汇被再次提出指非关系型、分布式、不提供ACID的数据库设计模式。 随着互联网时代的到来&#xff0c;数据爆发式增长&#xff0c;数据库技术发展日新月异&a…

基础算法,贪心算法,贪心策略,OJ练习

文章目录 一、概念二、OJ练习2.1 区间选点2.2 区间合并2.3 区间2.4 合并果子2.5 排队接水2.6 货仓选址2.7 防晒2.8 畜栏预定2.9 雷达设备2.10 国王游戏2.11 耍杂技的牛2.12 给树染色2.13 任务2.14 能量石 三、总结 一、概念 贪心是一种在每次决策时采取当前意义下最优策略的算…

[JAVASE] 类和对象(二)

目录 一. 封装 1.1 面向对象的三大法宝 1.2 封装的基本定义与实现 二. 包 2.1 包的定义 2.2 包的作用 2.3 包的使用 2.3.1 导入类 2.3.2 导入静态方法 三. static 关键字 (重要) 3.1 static 的使用 (代码例子) 3.1.1 3.1.2 3.1.3 3.1.4 四. 总结 一. 封装 1.1 面向对象…

windows 安装 Conda

1 Conda简介 Conda 是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。Conda 是为 Python 程序创建的,适用于 Linux,OS X 和Windows,也可以打包和分发其他软件。一般用conda来维护多个python版本。 2 安装…

IDEA报错:java 找不到符号

IDEA报错:java 找不到符号,代码没问题,IDEA缓存也清理了也重新构建了就是不行 最后使用终极大法 -Djps.track.ap.dependenciesfalse

NMACDR:基于邻居交互增强和多头注意力机制的跨域推荐模型

基于邻居交互增强和多头注意力机制的跨域推荐模型 湖北民族大学学报-孙克雷、汪盈盈-2023 思路 针对基于映射的跨域推荐模型没有充分关注源域中数据稀疏的用户,导致用户偏好的迁移效率降低的问题,提出本文。 首先,利用邻居用户的交互来增强源域中数据稀疏用户的交互序列,…

UNITY报错:An error occurred while resolving packages: Project has invalid dependencies: com.unit

打开unity出现了这样的报错&#xff1a; An error occurred while resolving packages: Project has invalid dependencies: com.unity.render-pipelines.universal: Package [com.unity.render-pipelines.universal12.1.2] cannot be found 这里在同站其他博主提供的方…

Python爬虫逆向——某公开数据网站实例小记(二)

注意&#xff01;&#xff01;&#xff01;&#xff01;某XX网站逆向实例仅作为学习案例&#xff0c;禁止其他个人以及团体做谋利用途&#xff01;&#xff01;&#xff01; 第一步&#xff1a;分析页面和请求方式 aHR0cHM6Ly95Z3AuZ2R6d2Z3Lmdvdi5jbi8jLzQ0L2p5Z2c 此网站经…

Oracle21c数据库普通用户创建及授权,建表,创建存储过程、序列、触发器

一、Oracle数据库错误 ORA-65096 表示你尝试在多租户容器数据库&#xff08;CDB&#xff09;环境中创建一个公共用户&#xff08;common user&#xff09;或角色&#xff0c;但没有使用正确的前缀。在多租户架构中&#xff0c;公共用户的用户名必须以 C## 或 c## 开头。 若想…