最近写sql语句的一个总结

1.在碰到求取连续的问题的时候,有2种思路,
  (1)可以将表的数据错位,就可以将前一条数据和后一条数据放在同一行,进行对比
  (2)可以使用row_number(),比如在nba题目中,求取连续夺冠球队的开始年份和结束年份
 --本题求取连续获得夺冠的nba球队,以及开始时间,和结束时间
nba的题目中用到的函数max(),min(),over()
over()分析函数主要是用于计算基于组的某种聚合,和聚合函数的不同之处在于,聚合函数对于每组只返回一行, 
over()每组返回多行
语法over(partition by deptno order by salary)
按照部门进行分区,按照工资进行排序(order by是个默认的开窗函数)
    开窗函数:与聚合函数一样,开窗函数也是对行集组进行聚合计算,但是它不像普通聚合函数那样每组只返回一个值, 
开窗函数可以为每组返回多个值,因为开窗函数所执行聚合计算的行集组是窗口。在ISO SQL规定了这样的函数为开窗函数 
,在oracle中则被称为分析函数,而在DB2中则被称为OLAP函数。
2.在学生信息查询第一题中
--查询 每个月 考试成绩至少2门科目成绩在 80分以上的学生信息。
(1):犯了一个错误,在我使用count()函数进行求取成绩大于80的时候,使用了over()函数,结果集中就出现了 
,每个学生每次考试成绩超过80的信息,结果集重复了,而放弃over()使用group by
的时候,就没有重复的结果集,over()分析函数,每组数据返回多行,而聚合函数每组只返回一行
(2):用到左外链接,以左表为基表,以右表为辅表,进行关联,左表的独有的信息,和左右表共有的信息
    右外连接:以右表为基表,以左表为辅表,右表独有的,和左右表共有的
    内连接:两张表共有的信息
    全外链接:两张表所有的信息
3.在学生信息查询二题中
(1):主要用到in,考试在第一次和第三考试
4.在学生信息查询三题中
查询每个老师带了多少门课,那个老师代课最多。
知识点:
(1)计算每学期老师教了多少门课程,需要用到distinct关键字,去重复
(2)求出每一次考试,那个老师代课最多,需要用到row_number(),给count()函数加一个伪列,倒叙排列,就可 
以取出代课最多的老师
(3)左外链接,需要注意的是关联的条件不同的条件产生的结果集都是不同的
5.在学生信息查询四题中
第几次考试 学生姓名 代课老师 科目1。。。总成绩 平均分
(1)需求是将行转列,用到CASE WHEN 
但是以上只能把每一行的数据分别显示在每一列,不能把所有的数据集中显示在一列(根据固定分区),这个时候就 
需要用到聚合函数,根据分组将本列的数据进行求和
(2)还有一点需要注意的是:当你想少一个group by的时候,可以对一个队sname进行求取最大值,结果还是他自 
己,但是去可以少一次group by
6.查询2015年和2016年每家店铺的销售数量和销售额
知识点
(1):case when 分别求出2015和2016的销售额和销售量
7.求出15年每周销售量最多的店铺(分管理城市)自然周
问题:本题我开始写的时候没有使用row_number(),而是直接求每周每个店铺的销量,然后求取最大值,然而在求取最大值的时候有一个问题就是,分组只能根据城市id和年内周进行分组,结果出来的数据没有店铺的id和店铺的名字
如果这个时候去和店铺信息表进行关联的时候,就会产生大量的结果集,
总结:在进行分区求取最大值的时候,建议用row_number(),====>再次记录
8.--第三题
--查询每个月有多少店铺某一天销售等于0(分管理城市)
--注释:如果某家店铺一个月中多天销售为0 则也是按一家店铺计算
(1)笛卡尔操作的最大作用是把任意两个不相关的表联接起来.在本题中使用笛卡尔积是因为要获取时间维度和每日 
销售关联,这样可以把每一天的销售都显示出来,因为本题中没有销售的就没有在每日销售表中
(2)本题中的条件是每个月中多天销售为0也是按1家店铺计算,所以在最后进行还要进行一次case when把一个店 
铺多天销售为0的改为1
9.----在一个月中有多少家店铺其中某连续两天销售额都为0 的店铺
(1)本题重要的一点就是使用日期错位把连续2天的销售显示到一行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值