第5章Excel数据分析之数据透视表遇见SQL

news2024/11/13 11:19:18

文章目录

        • 第5章 数据透视表遇见SQL
          • 5-1如何在查询中使用SQL语句?
          • 5-2SQL查询语句(数据透视表的辅助列)
          • 5-3SQL常用运算符(案例:添加分析维度)
          • 5-4SQL筛选语句(数据透视表数据源的过滤)
          • 5-5SQL语句(逻辑运算符升级版)
          • 5-6SQL的like运算符-1(字符串模糊筛选)
          • 5-7SQL的like运算符-2(字符组的应用)
          • 5-8SQL语句之前几项与唯一值
          • 5-9SQL语句之排序(采购数量前100汇总)
          • 5-10SQL语句之分组聚合-1(数据汇总分析)
          • 5-11SQL语句之分组聚合-2(条件分组)
          • 5-12SQL常用聚合函数
          • 5-13SQL逻辑分支函数-iif
          • 5-14SQL结构比iif更简洁的switch
          • 5-15SQL的数字分支结构-choose
          • 5-16SQL常用文本提取函数-1(实例:性别判断)
          • 5-17SQL常用文本查找函数-2(实例:文本拆分)
          • 5-18SQL常用文本替换函数-3(实例:部门拆分整理)
          • 5-19、5-20、5-21、5-22SQL常用文本格式化函数-4
          • 5-23SQL常用日期函数-1(实例:根据身份证做年龄段统计)
          • 5-24SQL常用日期函数-2(实例:分析结算日期)
          • 5-25SQL常用日期函数-3(实例:工龄计算)
          • 5-26SQL的合并语句(实例:多表合并统计)
          • 5-27SQL的合并语句(实例:多表合并统计进阶)
          • 5-28SQL的笛卡尔运算(实例:跨表查询数据)
          • 5-29SQL的笛卡尔运算进阶(实例:多表数据横向合并)
          • 5-30SQL内连接(案例:查询并做统计汇总)
          • 5-31SQL左右连接(案例:查询两表所有人业绩)
          • 5-32SQL左右连接进阶(案例:三表关联查询汇总)
          • 5-33SQL嵌套子查询应用-1
          • 5-34SQL嵌套子查询应用-2
          • 5-35SQL相关子查询应用-1
          • 5-36SQL相关子查询应用-2(美式排名)
          • 5-37SQL相关子查询应用-3(中式排名)

第5章 数据透视表遇见SQL
5-1如何在查询中使用SQL语句?

1、制作数据透视表时编写SQL语句

外部数据源制作动态数据透视表

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

找到文件数据

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

统计工资>=8000各部门有多少人

在这里插入图片描述

select * from [数据源$] where 基础工资>=8000

在这里插入图片描述

在这里插入图片描述

2、3d快捷键导入外部数据时SQL语句编写

先按Alt 松开,再按d松开,再按d松开,再按d松开

Alt+d+d+d

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5-2SQL查询语句(数据透视表的辅助列)

1.如何编写SQL查询语句

alt+d+d+d导入外部数据源放在新工作表,成超级表格

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

编写SQL语句

在这里插入图片描述

获取全部字段

select * from [销售表$]

获取某个字段

select 日期,数量 from [销售表$]

在这里插入图片描述

在这里插入图片描述

2.如何添加新增列(辅助列)

新增金额

select  *,数量*单价 as 金额  from [销售表$]

操作步骤:

1)导入数据

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2)数据透视表新增一列
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5-3SQL常用运算符(案例:添加分析维度)
  1. 算术运算符:+、-、*、/、\
   select *,单价+1 from  [销售表$]

在这里插入图片描述

  1. 比较运算符:>、>=、<、<=、<>、=
   select *,数量>=400 from [销售表$]

在这里插入图片描述

  1. 连接运算符:&
   select *,名称&"-"&单价 from [销售表$]

在这里插入图片描述

  1. 逻辑运算符:and、or、not
   select *,-1 and -1 and -1 from [销售表$]

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

select *,-1 or 0 or -1 from [销售表$]

在这里插入图片描述

select *,not 0 from [销售表$]

在这里插入图片描述

判断金额>=2000

在这里插入图片描述

5-4SQL筛选语句(数据透视表数据源的过滤)

1.普通筛选

select * from [销售表$] where 数量>=200

在这里插入图片描述

2.与关系筛选

select * from [销售表$] where 数量>=200 and 数量<=300

两个条件同时满足

在这里插入图片描述

3.或关系筛选

select * from [销售表$] where 单价>=5 or 数量<=400

只要一个条件满足

在这里插入图片描述

4.日期数据筛选

日期书写使用 ##

select * from [销售表$] where (单价>=5 or 数量<=400) and 日期<=#2022-1-5#

在这里插入图片描述

制作数据透视表

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5-5SQL语句(逻辑运算符升级版)

1.Between(可以看作and的简化)

 select * from [销售表$] where 数量>=100 and  数量<=200       
 select * from [销售表$] where 数量 between 100  and 200      
 select * from [销售表$] where 日期 between  #2022-1-5# and #2022-1-10# 

2.In(可以看作or的简化)

select * from [销售表$] where  名称="小米" or 名称="大豆" or 名称="红豆" 
 select * from [销售表$] where 名称 in  ("小米", "大豆" ,"红豆") 
 select * from [销售表$$]  where 名称 in (select  名称 from [条件表$]) 
5-6SQL的like运算符-1(字符串模糊筛选)

1.任意多个字符%

2.任意单个字符_

3.%与_的常见应用方法

like 是 等于
select * from [销售表$] where 名称 like “大%”以"大"字开头的名称
select * from [销售表$] where 名称 like “%豆”以"豆"字结尾的名称
select * from [销售表$] where 名称 like “%水%”包含"水"字的名称
select * from [销售表$] where 名称 like “___”三根下划线就是三个字符名称
select * from [销售表$] where 名称 like “_稻”以“稻”结尾的两个字符的名称
5-7SQL的like运算符-2(字符组的应用)

字符组表示方法:[……],表示字符长度为1。[!……]表示排除字符组中的字符。
汉字:[一-龥]
字母:[a-z]
数字:[0-9]

要求语句
以字母开头的品名select * from [订单表$] where 品名 like “[a-z]%”
以abcd开头的品名select * from [订单表$] where 品名 like “[abcd]%”
以数字开头的品名select * from [订单表$] where 品名 like “[0-9]%”
以13579开头的品名select * from [订单表$] where 品名 like “[13579]%”
包含%的品名select * from [订单表$] where 品名 like “%[%]%”
包含_的品名select * from [订单表$] where 品名 like “%[_]%”
不以字母开头的品名,加!select * from [订单表$] where 品名 like “[!a-z]%”
以汉字开头的品名select * from [订单表$] where 品名 like “[一-龥]%”
5-8SQL语句之前几项与唯一值

1.TOP前几项

2.Distinct获取唯一值

前三项select top 3 * from [销售表$]
去重select distinct * from [销售表$]
对日期去重select distinct 日期 from [销售表$]

3.实例:统计每天的采购品名数

select distinct 日期,名称 from [销售表$]

在这里插入图片描述

5-9SQL语句之排序(采购数量前100汇总)

1.排序(升序asc、降序desc)

以数量进行升序select * from [销售表$] order by 数量 asc
以数量进行降序select * from [销售表$] order by 数量 desc
以数量、单价进行降序select * from [销售表$] order by 数量 asc,单价 asc
以日期进行排序select * from [销售表$] order by 日期

2.实例:对采购数量前100汇总

select top 100 * from [销售表$] order by 数量 desc

在这里插入图片描述

5-10SQL语句之分组聚合-1(数据汇总分析)

1.group by分组基本写法

统计每一日的总金额

select 日期,sum(数量*单价) as 总金额 from [销售表$] group by 日期

在这里插入图片描述

2.实例1:统计出总金额大于等于10000的日期。
3.实例2:对采购金额用千为频段,统计记录数。

获取频段:

select  数量*单价\1000 as 频段 from [销售表$] group by 数量*单价\1000

在这里插入图片描述

统计记录数:

select  数量*单价\1000 as 频段,count(*) as 计数  from [销售表$] group by 数量*单价\1000

在这里插入图片描述

5-11SQL语句之分组聚合-2(条件分组)

1.多字段分组

select 日期,名称,count(*) as 计数 from [销售表$]  group by 日期,名称

2.分组前的条件语句

数量>=300,以名称进行分组计数select 名称,count(*) as 计数 from [销售表$] where 数量>=300 group by 名称

3.分组后的条件语句(having)

More Actions数量>=300,以名称进行分组计数,筛选出计数>=5

select 名称,count(*) as 计数 from [销售表$]  where  数量>=300 group by 名称  having 计数 >=5    

执行出错 having 跟 group by同时执行的

正确:

select 名称,count(**) as 计数 from [销售表$]  where  数量>=300 group by 名称  having count(*)>=5

在这里插入图片描述

5-12SQL常用聚合函数
1. sumselect sum(数量) as 总数量 from [销售表$]
2. avgselect avg(数量) as 平均值 from [销售表$]
3. maxselect max(数量) as 最大值 from [销售表$]
4. minselect min(数量) as 最小值 from [销售表$]
5. countselect count(*) as count计数 from [销售表$]
6. firstselect first(日期) as 第一个日期 from [销售表$]
7. lastselect last(日期) as 最后一个日期 from [销售表$]
select sum(数量) as 总数量,avg(数量) as 平均数量,max(数量) as 最大值, min(数量) as 最小值,count(*) as 计数,first(日期),last(日期) from [销售表$]

在这里插入图片描述

单价>=平均单价的数据

select * from  [销售表$] where 单价 >=(select  avg(单价) from [销售表])
5-13SQL逻辑分支函数-iif

1.iif函数的普通写法

iif(判断条件,正返回值,f负返回值)

select * ,iif(数量>=300,"优秀","普通") as 等级  from [销售表$]

2.iif函数的嵌套写法

数量>=400,优秀

数量>=200,良好

数量>=100,中等

数量>=0,较差

select * ,iif(数量>=400,"优秀",iif(数量>=200,"良好",iif(数量>=100,"中等","较差"))) as 等级  from [销售表$]

在这里插入图片描述

3.实例:根据等级做汇总(使用数据透视表)

select * ,iif(数量>=400,"优秀",iif(数量>=200,"良好",iif(数量>=100,"中等","较差"))) as 等级  from [销售表$]

在这里插入图片描述

5-14SQL结构比iif更简洁的switch

1.Switch基本语法

Switch(
条件1,值1,
条件2,值2,
条件3,值3,
……
)

例如:

select * ,switch(数量>=400,"优",数量>=300,"良",数量>=100,"中",数量>=0,"差") as 等级  from [销售表$]

在这里插入图片描述

select * ,switch(名称 like "%米","米类",名称 like "%豆","豆类",名称 like "%麦","麦类",-1,"其他") as 分类  from [销售表$]

在这里插入图片描述

5-15SQL的数字分支结构-choose

1.choose函数用法

0-59
60-79
80-89
90-100
select *,choose(分数\10+1,"差","差","差","差","差","差","中","中","良","优","优")  as 等级 from [成绩表$]

在这里插入图片描述

5-16SQL常用文本提取函数-1(实例:性别判断)

1.left\right\mid提取函数使用

left(左侧提取)select *,left(姓名,1) as 左 from [信息表$]
right(右侧提取)select *,right(姓名,1) as 右 from [信息表$]
mid(中间侧提取)select *,mid(姓名,2,1) as 中 from [信息表$]
select *,left(姓名,1) as,right(姓名,3) as,mid(姓名,2,1) asfrom [信息表$]

在这里插入图片描述

2.实例:性别判断

350781196403072089 身份证号 倒数第二个数据 奇偶数决定性别,奇数为男,偶数为女

先得到性别数字:

select *,mid(身份证,17,1) as 性别数字   from [信息表$]

再除以2得余数用mod:

select *,mid(身份证,17,1) as 性别数字,mid(身份证,17,1) mod 2 as 余数   from [信息表$]

在这里插入图片描述

(mid(身份证,17,1) mod 2) = 0 为女

mid(身份证,17,1) mod 2 =1 为男

select *,mid(身份证,17,1) as 性别数字,switch((mid(身份证,17,1) mod 2)=0,"女",-1,"男" )as 性别   from [信息表$]

在这里插入图片描述

5-17SQL常用文本查找函数-2(实例:文本拆分)

1.instr查找函数

select instr(“abcd”,“b”) ,意思是b在“ancd”第几个位置,得到的值返回2,在第二个位置

在这里插入图片描述

select instr(3,“abcdefb”,“b”),从第三个位置开始查找 b

在这里插入图片描述

2.实例:文本拆分(根据拆分结果做数据汇总)

成绩
战承志-A组-85
疏绿凝-A组-120
绳依云-B组-99
京访烟-C组-100
赫长莹-A组-9
柏玉宇-D组-36
韩子悦-A组-86
胡东-A组-78
黎若骞-A组-69
冒阳阳-A组-140
伯念-D组-110
旷同光-A组-98
王依白-B组-114
错香芹-A组-83

1)提取姓名:

先知道"-"位置数,减1就是姓名最后一个字的位置数,在用left提取名称

select *,instr(成绩,"-")  as 位置,left(成绩, 位置-1) as 姓名 from [成绩表$]

在这里插入图片描述

2)提取组别

先知道"-"位置数,加1就是组别第一个位置数,组别长度都是2,在用mid提取组别

select *,instr(成绩,"-")  as 位置,left(成绩, 位置-1) as 姓名,mid(成绩,位置+1,2) as 组别 from [成绩表$]

在这里插入图片描述

3)提取分数

获取第二个-的位置:instr(位置+1,成绩,“-”)

获取分数:mid(成绩,instr(位置+1,成绩,“-”)+1,2)

获取的分数是文本,进行+0转换成数值 mid(成绩,instr(位置+1,成绩,“-”)+1,2)+0

select *,instr(成绩,"-")  as 位置,left(成绩, 位置-1) as 姓名,mid(成绩,位置+1,2) as 组别 ,mid(成绩,instr(位置+1,成绩,"-")+1,2)+0  as 分数 from [成绩表$]

在这里插入图片描述

数据表统计

在这里插入图片描述

5-18SQL常用文本替换函数-3(实例:部门拆分整理)

1.Replace函数使用方法

replace(替换数据,查找被替换的数据,替换成的值,起始位置,替换个数)

在"asbffj-njdn-vfg"查找出"-"替换成“|”select replace(“asbffj-njdn-vfg”,“-”,“|”)

在这里插入图片描述

2.实例应用

先把横线全部替换成逗号,再把第一个逗号替换成(,最后再连接 )

select *,replace(replace(名单,"-",","),",","(",1,1) &")" as 处理后名单 from [信息表$]

在这里插入图片描述

5-19、5-20、5-21、5-22SQL常用文本格式化函数-4

1.Format函数使用方法

format(数据 ,“代码”) as 新增列名

2.代码详解

*代码**注释*
aaa星期几(简写)
aaaa星期几(标准)
d提取天数
dd提取天数,以两位数表示
ddd星期几英文简写
dddd星期几英文完全拼写
ddddd提取日期部分(x/x/x)
dddddd提取日期部分(x年x月x日)
w一周的第几天,默认周日为第1天,如果周一为第1天则格式为:format(日期,“w”,2)
ww返回一年中的第几周
m提取月数
mm提取月数,以两位数表示
mmm英文月份(简写)
mmmm英文月份(完整写法)
y一年中的第几天
yy年份中的后两位
yyyy年份
q返回季度
h
hh
n
nn
s
ss
ttttt返回完整的时间
am/pm判断上午还是下午,a/m ,AM/PM同理
0数字占位符
#数字占位符
@文字占位符
!强制显示
\强制显示
>转为大写
<转为小写
select * ,format(mid(身份证,7,8),"0000-00-00") as 出生年月日,format(出生年月日 ,"aaa") as 周几,format(出生年月日 ,"aaaa") as 星期几,format(出生年月日 ,"d") as, format(出生年月日 ,"dd") as2,format(出生年月日 ,"ddd") as 周几e,format(出生年月日 ,"dddd") as 周几e2,now from [员工信息$]

在这里插入图片描述

select *,cdate(format(mid(身份证,7,8),"0000-00-00")) as 日期,format(日期,"w",2) as 周w,cint(format(日期,"ww",2)) as 年周ww,format(日期,"m") as 月m,format(日期,"mm") as 月mm,format(日期,"mmm") as 月mmm,format(日期,"mmmm") as 月mmmm,format(日期,"y") as 天y,format(日期,"yy") as 年yy,format(日期,"yyyy") as 年yyyy,format(日期,"q") as 季q from [员工信息$]

在这里插入图片描述

select *,接单日期 as 日期,format(日期,"h") as 小时h,format(日期,"hh") as 小时hh ,format(日期,"n") as 分钟n,format(日期,"nn") as 分钟nn,format(日期,"s") as 秒s,format(日期,"ss") as 秒ss,format(日期,"hh:nn:ss") as 时间hns,format(日期,"ttttt") as 时间ttttt,format(日期,"AM/PM") as 上下午   from [订单表$]

在这里插入图片描述

select *,format(盈亏,"盈;亏;平") as 状态 from [基金盈亏表$]

在这里插入图片描述

5-23SQL常用日期函数-1(实例:根据身份证做年龄段统计)

1.date()、time()、now()

select date() as 当前日期,time() as 当前时间,now()  as 当前日期以及时间

在这里插入图片描述

2.实例:根据身份证做年龄段统计

select *,mid(身份证,7,4) as 出生年份,format(date(),"yyyy") as 现在年份,现在年份-出生年份 as 年龄 from [信息表$]

在这里插入图片描述

5-24SQL常用日期函数-2(实例:分析结算日期)

1.Datepart提取日期指定单位的数据

Datepart(单位,时间)

select now() as 当前日期,datepart("yyyy",now()) as 当前年份

在这里插入图片描述

2.Dateadd对日期指定单位数据的增减

Dateadd(单位,值,时间或日期)

代码注释
yyyy
q季度
m
y某年的第几天
d某月的第几天
w某周的第几天
ww
h
n
s
select now() as 当前日期,dateadd("yyyy",1,now()) as 下一年日期

在这里插入图片描述

实例:

公司结算日期付款方式
A公司2022/1/26微信
B公司2022/1/22支付宝
C公司2022/1/17现金
D公司2022/1/25转账
E公司2022/1/4支付宝
F公司2022/1/29支付宝
G公司2022/1/23微信
H公司2022/1/6现金
付款方式天数
微信5
支付宝7
现金3
转账6

算出付款日期

算出付款天数:,switch(付款方式=“微信”,5,付款方式=“支付宝”,7,付款方式=“现金”,3,付款方式=“转账”,5) as 付款天数

算出付款日期:dateadd(“d”, 付款天数,结算日期) as 付款日期

select * ,switch(付款方式="微信",5,付款方式="支付宝",7,付款方式="现金",3,付款方式="转账",5) as 付款天数,dateadd("d", 付款天数,结算日期) as 付款日期 from [结算表$]

在这里插入图片描述

5-25SQL常用日期函数-3(实例:工龄计算)

1.datediff计算两个日期指定单位的差值。

datediff(单位,起始日期,终止日期)

代码注释
yyyy年数
q季度数
m月数
y天数
d天数
w周数
ww周数(不包括date1的周日)
h小时数
n分钟数
s秒数

些时间要用 “#”

select datediff("yyyy",#1999-03-03 9:15:00#,#2024-03-16 14:00:00#) as  年差,datediff("m",#1999-03-03 9:15:00#,#2024-03-16 14:00:00#) as  月差,datediff("h",#1999-03-03 9:15:00#,#2024-03-16 14:00:00#) as  时差

在这里插入图片描述

(实例:工龄计算)

select *,datediff("yyyy",入职日期,date()) as 工龄数 from [data$]

在这里插入图片描述

5-26SQL的合并语句(实例:多表合并统计)

1.union all语句的使用方法

select * from [1$] union all select *   from [2$] union all select *  from [3$]

2.实例:多表合并统计

select *,"喜剧片" as 类型 from [喜剧片$] union all select * ,"恐怖片" as 类型  from [恐怖片$] union all select * ,"爱情片" as 类型 from [爱情片$]

在这里插入图片描述

5-27SQL的合并语句(实例:多表合并统计进阶)

1.union去重合并

两个表出现重复的去重保留一个

select * from [1] union  select * from [2]

2.实例(多表合并统计进阶)

华林商城

月份电脑手机家电合计
1月12710377307
2月899154234
3月738160214
4月929660248
5月14972135356
6月10310261266
7月1377583295
8月11513797349
9月5388142283
10月77150149376
11月1509771318
12月115133119367

好又美

月份电脑家电
1月14287
2月7066
3月12781
4月115132
5月57125
6月130107
7月134108
8月105143
9月110144
10月103121
11月13974
12月89126

绿联商城

月份手机电脑
1月11263
2月7182
3月13690
4月146148
5月7073
6月80141
7月107144
8月13058
9月6176
10月14253
11月60139
12月78142

三表合一

select  月份,电脑,手机,家电,"华林商城" as 商城 from [华林商城$] union all select 月份,电脑,0,家电,"好又美" from [好又美$] union all select 月份,电脑,手机,0,"绿联商城" from [绿联商城$]

在这里插入图片描述

5-28SQL的笛卡尔运算(实例:跨表查询数据)

1.演示笛卡尔运算原理

select * from [1$],[2$]

2.实例:跨表查询数据

销售表

日期产品重量
2022/8/1白菜10
2022/8/2茄子20
2022/8/3冬瓜5
2022/8/4四季豆100
2022/8/5四季豆101
2022/8/5茄子200

价格表

品名单价
白菜2.5
莴笋5.5
茄子1.9
洋葱4.6
冬瓜0.5
四季豆6
select 产品,sum(重量*单价) as 金额 from [销售表$],[价格表$] where 产品=品名 group by 产品

在这里插入图片描述

5-29SQL的笛卡尔运算进阶(实例:多表数据横向合并)

2020年

姓名部门分数
张三销售部70
李四财务部79
张三开发部60
王五IT部94
朱能销售部56
王炸销售部83

2021年

姓名部门分数
张三销售部80
李四财务部71
张三开发部69
王五IT部78
朱能销售部89
王炸销售部74

2022年

姓名部门分数
张三销售部82
李四财务部55
张三开发部57
王五IT部100
朱能销售部57
王炸销售部74
select * from ['2020年$'],['2021年$'],['2022年$']

在这里插入图片描述

select t1.姓名,t1.部门,t1.分数 as 2020,t2.分数 as 2021,t3.分数 as 2022from ['2020年$'] t1,['2021年$'] t2,['2022年$'] t3 where t1.姓名=t2.姓名 and t2.姓名=t3.姓名 and t1.部门=t2.部门 and t2.部门=t3.部门

在这里插入图片描述

5-30SQL内连接(案例:查询并做统计汇总)

1.inner join内连接用法

select * from [1$]  inner join [2$] on [1$]. 字段 =[2$]. 字段

select * from [销售表$] inner join [价格表$] on [销售表$].产品 =  [价格表$].品名

在这里插入图片描述

2.案例:查询并做统计汇总

select 产品,sum(重量*单价) as 金额 from [销售表$] t1 inner join [价格表$] t2 on t1.产品=t2.品名 group by 产品

在这里插入图片描述

5-31SQL左右连接(案例:查询两表所有人业绩)

1.left join与right join用法

select * from [1$]  left join [2$] on [1$]. 字段 =[2$]. 字段

select * from [1$]  right join [2$] on [1$]. 字段 =[2$]. 字段

2.案例:查询两表所有人业绩

2020年

姓名业绩
张三580000
李四660000
王麻子470000

2021年

姓名业绩
张三770000
陈宫368000
王麻子570000
黄杰690000

左连接

select t1.姓名,t1.业绩,t2.业绩 from ['2020年$'] t1 left join  ['2021年$'] t2 on t1.姓名 = t2.姓名

在这里插入图片描述

右连接

select t2.姓名,t1.业绩,t2.业绩 from ['2020年$'] t1 right join  ['2021年$'] t2 on t1.姓名 = t2.姓名

在这里插入图片描述

左右连接

select t1.姓名,t1.业绩 as 2020,t2.业绩 as 2021from ['2020年$'] t1  left join  ['2021年$'] t2 on t1.姓名=t2.姓名  union   select t2.姓名,t1.业绩,t2.业绩 from ['2020年$'] t1  right join  ['2021年$'] t2 on t1.姓名=t2.姓名

在这里插入图片描述

5-32SQL左右连接进阶(案例:三表关联查询汇总)

实例:统计各部门总人数和奖金

三表合一

select * from ([成绩表$] t1 left join [名单表$] t2 on t1.姓名 = t2.姓名) left join [部门表$] t3 on t2.部门ID = t3.序号

在这里插入图片描述

统计各部门总人数和奖金

select 部门,count(*) as 记录条数,sum(奖金) as 总奖金 from ([成绩表$] t1 left join [名单表$] t2 on t1.姓名 = t2.姓名) left join [部门表$] t3 on t2.部门ID = t3.序号 group by 部门

在这里插入图片描述

5-33SQL嵌套子查询应用-1

1.实例1:筛选高于平均单价的记录。

select *  from [销售表$] where 单价>=(select avg(单价)  from [销售表$])

2.实例2:将筛选条件放在单元格。

select *  from [销售表$] where 名称 in (select 名称 from [Sheet1$n:n])

在这里插入图片描述

3.实例3:将多表合并结果做分组汇总。

三表合一:

select *,"喜剧片" as 类型 from [喜剧片$] union all select * ,"恐怖片" as 类型  from [恐怖片$] union all select * ,"爱情片" as 类型 from [爱情片$]

分组汇总:

select 类型,count(*) as,sum(数量) as 总数量  from (select *,"喜剧片" as 类型 from [喜剧片$] union all select * ,"恐怖片" as 类型  from [恐怖片$] union all select * ,"爱情片" as 类型 from [爱情片$]) group by 类型

在这里插入图片描述

5-34SQL嵌套子查询应用-2

1.实例:统计各类图书的种类数

去重:

select distinct 类别,书名 from [销售表$]

select 类别,count(*) as 总类数 from (select distinct 类别,书名 from [销售表$]) group by 类别

在这里插入图片描述

2.实例:筛选大于等于各类图书均价的书籍。

select a.* from [销售表$] a inner join (select 类别,avg(单价) as 均价 from [销售表$] group by 类别) b on a.类别=b.类别 and a.单价>=b.均价

在这里插入图片描述

5-35SQL相关子查询应用-1

1.相关子查询工作原理

2.实例:筛选出大于等于所在班平均分的记录。

select * from [分数表$] a where 分数>=(select avg(分数) from [分数表$] b where a.班别=b.班别)

在这里插入图片描述

5-36SQL相关子查询应用-2(美式排名)

1.美式排名

select *,(select count(*) from [成绩表$]  b where a.分数 < b.分数)+1 as 名次  from [成绩表$] a

在这里插入图片描述

2.美式分组排名

班别里面排名

select *,(select count(*) from [成绩表$]  b where a.班别=b.班别 and a.分数 < b.分数)+1 as 名次  from [成绩表$] a

在这里插入图片描述

5-37SQL相关子查询应用-3(中式排名)

3.中式排名

select *, 1+(select count(*) from (select distinct 分数 from [成绩表$])b where a.分数<b.分数) as 名次 from [成绩表$] a

在这里插入图片描述

4.中式分组排名

select *, 1+(select count(*) from (select distinct 班别,分数 from [成绩表$]) b where a.班别=b.班别 and a.分数<b.分数) as 名次 from [成绩表$] a

在这里插入图片描述

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

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

相关文章

【单片机毕业设计选题24085】-基于STM32的心电采集系统设计

系统功能: 系统上电后&#xff0c;OLED显示“欢迎使用心电采集系统请稍后”两秒后进入正常页面显示。 第一行显示心率和血氧值。 第二行显示心率设定高值。 第三行显示心率设定低值。 第四行显示心率状态&#xff0c;"Rate OK", "Rate High", "R…

C++中的依赖注入

目录 1.概述 2.构造函数注入 3.setter方法注入 4.接口注入 5.依赖注入框架 6.依赖注入容器 7.依赖注入框架的工作原理 8.依赖注入的优势 9.总结 1.概述 依赖注入是一种设计模式&#xff0c;它允许我们在不直接创建对象的情况下为对象提供其依赖项&#xff1b;它通过将…

学习c语言第十四天(调试+练习)

一、调试 所有发生的事情都一定有迹可循&#xff0c;如果问心无愧&#xff0c;就不需要掩盖也就没有迹象了&#xff0c;如果问心有愧 就必然需要掩盖&#xff0c;那就一定会有迹象&#xff0c;迹象越多就越容易顺藤而上&#xff0c;这就是推理的途径。 顺着这条途径顺流而下就…

广东省某地区智慧水务平台全面升级启航(案例解析)

项目背景 随着物联网、人工智能、大数据、数字孪生等技术的应用&#xff0c;对精准调控、漏损控制、可视化管理、节能降耗、高效指挥等方面的要求越来越高。鉴于此&#xff0c;广东某地区的现有智慧水务平台已无法满足日益增长的智能化管理需求&#xff0c;亟待进行智慧化升级以…

工程计算与分析课程报告-Matlab

如下图所示的单自由度系统: m20kg, c30 Ns/m, and k3000 N/m. 1、应用数学、机械等理论知识推导出以下系统的数学模型&#xff1a; 其中&#xff1a; x坐标如上图所示&#xff0c;取其稳态点为零点。 M为重物质量 K为弹簧弹性系数 C为阻尼系数 F(t)为施加在重物上的外激励…

应用层协议HTTP

应用层协议HTTP 注1. HTTP协议2. 认识URL3. HTTP 协议请求与响应格式3.1.快速获取HTTP请求3.2 快速解析HTTP请求3.3 细致了解HTTP请求与响应 4. 完善Http.hpp代码&#xff0c;实现http协议4.1 http请求4.2再谈URL4.3构建http应答4.4 Content-Type属性 5.HTTP请求/响应属性5.1HT…

vscode+git解决远程分支合并冲突

1&#xff09;远程分支和远程分支不复杂情况合并 例如readme的冲突 可直接在github上解决 删到只剩下 #supergenius002 合并冲突测试1/合并测试冲突1合并测试冲突2/合并测试冲突2就行 《《《/》》》也要删掉 2&#xff09;但如果是复杂的冲突&#xff0c;让我们回到vscod…

glsl shader中实现canvas中的createRadialGradient效果

在网上找了好久&#xff0c;也没有发现有现成用shader去实现canvas radialGradient效果的.大部分都是简单的只有一个中心圆或者通过canvas绘制渐变再作为纹理图像进行贴图&#xff0c;没有类似像canvas有内圆与外圆&#xff0c;两圆心位置不一样&#xff0c;可以用实现类似焦点…

【开发问题记录】启动某个微服务时无法连接到seata(seata启动或配置异常)

问题记录 一、问题描述1.1 问题复现1.1.1 将Linux中的部分微服务启动1.1.2 在本地启动当时出错的服务 1.2 解决思路1.2.1 Nacos中seata相关的信息1.2.2 Linux中seata相关的信息 二、问题解决2.1 seata的配置错误2.1.1 Nacos中seata的配置问题2.1.2 命名空间问题的发现 2.2 网络…

Python数值计算(12)

本篇说说Neville方法。Neville方法的基础是&#xff0c;插值多项式可以递归的生成&#xff0c;有时进行插值的目的是为了计算某个点的值&#xff0c;这个时候并不需要将拟合曲线完全求出&#xff0c;而是可以通过递归的方式进行计算&#xff0c;具体操作如下&#xff1a; 例如…

代码实践思考:ROS1和ROS2

扩展 能否借助人工智能工具将ROS1批量转为ROS2如何更高效的进行ROS学习 ROS1大量案例直接批处理用智能工具转为ROS2案例 不同版本之间的工具软件直接用智能方式进行代码升级 例如OpenCV之类&#xff0c;一些函数变化&#xff0c;直接用智能工具进行批量代码优化 机器人画圆-…

滞回比较器工作原理,应用,TINA仿真

滞回比较器 滞回比较器的主要应用是增加滞回控制&#xff0c;让其对微小的变化不那么敏感&#xff0c;增强抗干扰能力&#xff0c;避免由噪声引起的不稳定状态&#xff0c;通常用于噪声环境下的阈值检测以及信号调理。根据不同需求&#xff0c;滞回比较器还可以设计成开漏极输出…

超级智能体创造营:启动!我的情侣匹配度测试助手

零、写在前面 听说由百度文心智能体平台主办&#xff0c;万众瞩目的 超级智能体创造营 第三期启动啦&#xff01; 在本期的创造营中&#xff0c;博主开发了一款有趣的超级智能体&#xff1a;情侣匹配度测试助手。 为什么要开发它呢&#xff0c;快来听博主娓娓道来吧~ 一、超…

【通俗理解】自由意志与预测——混沌理论与预测的不可能性

【通俗理解】自由意志与预测——混沌理论与预测的不可能性 自由意志与预测的类比 你可以把自由意志比作一只难以捉摸的蝴蝶&#xff0c;它的每一次振翅都可能引发不可预测的风暴。而预测则像是一个试图捕捉这只蝴蝶的网&#xff0c;但往往因为蝴蝶的微小变动而错失目标。 自由意…

五大AI测试开源框架及使用方法介绍

AI测试框架是一套系统的测试工具和方法&#xff0c;包括测试的规范和基础代码&#xff0c;涵盖了一系列的测试思想和方法。这些框架可以帮助开发者和测试人员对AI模型进行测试&#xff0c;确保AI模型在真实世界的应用中能够达到预期的效果。接下来的内容&#xff0c;我们将介绍…

PHP苹果 V X iPhone微商i o s多分开V X语音转发密友朋友圈一键跟圈软件

苹果VX神器&#xff01;iPhone微商必备&#xff1a;ios多开、VX语音转发、密友朋友圈一键跟圈软件大揭秘&#xff01; 一、iOS多开新境界&#xff0c;工作生活两不误&#xff01; 你是不是也烦恼过&#xff0c;想要在工作号和生活号之间自由切换&#xff0c;却因为iPhone的限制…

【vue3】pinia配置(任意组件通信,集中状态管理容器)

选择式写法 一、安装pinia依赖 终端输入&#xff1a;npm install pinia 二、配置pinia 第一步&#xff1a;创建仓库&#xff0c;在src目录下创建文件夹modules和文件index.ts. 第二步&#xff1a;配置index.ts // 创建pinia大仓库 import { createPinia } from "pin…

H5+JS视频列表

源码在最后面 好像有些浏览器不适配&#xff08;可能是设置了禁用自动播放的功能&#xff09; 实现功能 视频自动无声播放鼠标置于某个视频板块之上时自动无声播放点击视频跳转视频链接 效果图&#xff08;部分 视频加载可能有点慢&#xff09; 部分功能实现原理 1.无声播放…

学习C语言第十六天(调试、)

调试 第一题 C 第二题 A 第三题 C 第四题 C 第五题 D release不可以调试 第六题 越界访问访问到了i的地址 编程题 模拟strcpy void my_strcpy(char*arr1,char*arr2) {while (*arr2){*arr1 *arr2;} } int main() {char arr1[50…

【足球走地软件】走地数据分析预测【大模型篇】走地预测软件实战分享

了解什么是走地数据&#xff1f; 走地数据分析&#xff0c;在足球赛事的上下文中&#xff0c;是一种针对正在进行中的比赛进行实时数据分析的方法。这种方法主要用于预测比赛中的某些结果或趋势&#xff0c;如总进球数、比分变化、球队表现等。 在足球走地数据分析中&#xf…