MYSQL经典45题笔记

数据库引擎会采取逐条取主查询记录与子查询实施比对(where degree …),子查询中,取主查询的字段a.cno作为过滤,输出不同课程的avg(degree);比对结束后确定是否检出该条记录,最后汇总各次检索的结果输出整个记录集

思路:选出参加过李诚老师课的学生的sno,用NOT IN取没参加过的学生(主体是学生而不是课程)

知识点:涉及到mysql中的自定义变量@变量名,以及赋值符号:=;关联表时,若不指定关联的键,则会生成笛卡尔集,即score表的每一条记录后都会带有t表的记录

我的推测:由于我们在关联表时定义了@score为null值,又由于mysql是逐行选取,因此会取上一条非空的记录作为@score的值和该行的degree值进行比较

弊端:最后的结果会多出来@score列,是我们不想要的,那么可以将@score列并入case when的条件语句中…

知识点:由于case when语句的运行规则是逐条进行,因此当@score = degree语句成立时,不执行下一行判断;若不成立,则由于@score:=degree是一个赋值语句,恒成立,进而执行@rank+1语句

思路:难点在于前三如何取,用大于某成绩的记录条数3来做为限制条件即可以选取到前三名的记录

我推测的取数逻辑:按cno和degree降序排列;取第一个记录后,进入到where过滤;子查询的第一个条件为cno相等,第二个条件为大于第一条记录中degree的值的记录,假设有2条,则count函数返回2,满足小于3的条件,父查询中的where返回true;第一条记录被选出,进入第二条记录…

思路:先查找出成绩大于80分的学生编号(这些学生至少有一门课成绩大于80分),再用编号作为限定条件选取学生信息

思路:使用group by将成绩按sno求和,再使用ntile窗口函数对总成绩分箱,取出level=1的学生记录

问:为什么不能按男/女生分组?原因对数据不够理解,因为一个学生会参加多个课程,只能通过在外层对sno进行分组求sum(degree),才能在内层进行排序,内层排序可以和partition同时进行(如果在外层对ssex进行分组,窗口函数的内层就无法按sno求sum,而是按照ssex作为聚合方式求sum)

查询顺序是先group by再select;注意sum的用法,不加sum则只会输出第一条数据

之前错误的思路为:希望将上一条记录的degree赋值给自定义变量,然后做差;实际上做不到,只能通过判断或运算来调用上一条记录的自定义变量

select cno, sno, degree-pre diff from( select cno, sno, degree, lag(degree,1) over(partition by cno) pre from score) a;

购买已经完成实名认证的微信公众号,应该通过合法途径进行。下面提供了关于购买实名认证的微信公众号的一些解答: 企业微…

果冻宝盒邀请码 223377 ,果冻宝盒邀请码,填写 223377 可直升总裁,享受最高返利权限! 果冻宝盒是…

玩微信的用户都会定期的刷自己的朋友圈查看好友发布的动态,及时了解好友的现状,当然也少不了和对方进行互动,操作一个朋…

利用抖音短视频平台达到变现目的的抖音用户其实挺多的,它的变现方式有很多种,各位抖音用户们想要赚钱的话,最好了解一下…

肥妻逆袭:八零糙汉他沦陷(杨梦阑小说)完整章节免费阅读 主角:杨梦阑 简介:炸弹在她所在的范围内炸开,再睁眼,她竟…

😱真后悔把无限流量套餐改掉了!现在只能用每月210G流量的流量套餐了。😭👋 大家好呀!今天和大家分享一点点小遗憾😢…

京东作为中国领先的电商平台之一,为了吸引用户和促进销售,经常会发布各种优惠券活动。那么,关于京东的优惠券在哪里可以…

现在的手游折扣平台很多,每家几乎都是不一样的折扣水准,所以说选择一个靠谱的平台是玩家最基本的原则,本期小编就根据现…

每天持续更新复盘有15000+:线下剧本杀·百变大侦探·我是谜·谁是凶手·玩吧·剧本杀线上·戏精大侦探·魔王杀·儿…

适合晚上做的25个副业有哪些? 在现代社会,越来越多的人开始从事副业来增加收入或者追求自己的兴趣爱好。对于那些白天…

You May Also Like

More From Author