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

文章目录

第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

在这里插入图片描述

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值