SQL刷题笔记:高级条件语句详解
创作时间:
2025-01-22 08:47:54
作者:
@小白创作中心
SQL刷题笔记:高级条件语句详解
SQL高级条件语句的掌握是提升数据库查询能力的关键。本文通过一个具体的SQL题目,详细讲解了如何根据指定记录的存在与否输出不同情况,并深入解析了相关知识点。
题目:SQL149 根据指定记录是否存在输出不同情况
作答解析
-- 正确答案
select
uid, incomplete_cnt, incomplete_rate
from (
select
ui.uid as uid, ui.level as `level`
, count(er.start_time) as answer_cnt -- 每个用户的作答数量,判断是否有作答记录
, count(if(er.submit_time is null, er.start_time, null)) as incomplete_cnt
-- 注意:count(*)会包括null计数,而count(表达式/字段)不会计入null
-- 特别提醒:count函数要注意后面0和null的区别!!!
, round( if( count(er.start_time) = 0, 0,count(if(er.submit_time is null, er.start_time, null))/count(er.start_time)), 3) as incomplete_rate
-- 外面这个if是为了防止分母为0的错误,count(表达式/字段)不会计入null
, max(if(ui.level=0 and count(if(er.submit_time is null, er.start_time, null))>2, 1, 0)) over() as flag
-- max窗口函数的作用是确保有一个这样的用户即可(有1即可),因为如果全是0就要将所有的用户输出
from user_info ui
left outer join exam_record er on ui.uid = er.uid
-- 这里使用左连接而不是内连接,目的是保证每个用户都有记录,而表er中只有3种uid
group by ui.uid, ui.level
) t
where (flag=1 and `level`=0)OR(flag=0 and answer_cnt>0)
-- or表示要么输出满足条件的部分用户,要么输出有作答记录的所有用户
order by incomplete_rate;
知识点
COUNT函数的使用要点
在 SQL 中,COUNT() 函数的计算规则是:
- COUNT(*) 会计算所有行,不管其中的值是否为 NULL。
- COUNT(表达式) 或 COUNT(字段) 只会计算非 NULL 的值,即 NULL 值会被排除在计数之外。
内连接与左连接的区别
- 内连接:只保留两个表中相同的记录。
- 左连接:合并后左边的表所有行都保留,若左边的表有空值则删除(即删除右边没有匹配上的)。
此题中,如果是内连接,只能得到ui和er都有的数据表:
由题可知,er中只有1001,1002,1003这几个uid,如用内连接则丢失了1004,1005,1006这几个uid。
但如果是左连接,则会保证左边的表即ui中的数据都保留:
热门推荐
蝙蝠侠备受争议的“不杀生”规则将继续存在
公务员考试分数计算规则详解
《中国银屑病生物制剂及小分子药物治疗指南》重磅更新!
令美军潜艇无处遁形!港媒:中国最新反潜手段,可发现尾流磁场!
北欧神话中的十二主神:神秘力量的象征与传承
做了PET/CT检查,为何还加做CT或MR增强扫描?
韩国地产,为什么韩国年轻人都“喜欢”租房?
狗狗螨虫感染怎么办?一文详解治疗与预防方法
一张表全面了解!汽车纳米陶瓷膜 VS 磁控溅射金属膜
2025年2月香港演唱会全攻略:15场精彩演出信息汇总
在花漾南京玩出“花”样,南京文旅春季产品发布
强化学习中的重要性采样技术详解
勾调为何被誉为白酒生产中的“艺术”?
服用中成药为何要忌口
如何准确计算岁?这种计算有哪些依据?
死海中有哪些动物?揭秘死海独特的生命世界
头皮发痒的原因终于找到了!教你几招快速舒缓
周田明教授:老年人健康减重指南
清甜爽口的娃娃菜,除了煮汤,还可以这样做
如何选择适合的营养学科研课题
天津十大必吃美食:从十八街麻花到狗不理包子
北欧神话中的世界末日:诸神黄昏的惊人预言
曼联放弃范尼是明智之举,莱斯特城连败泥沼深陷
球兰:生长习性、特点与生长过程特性
如何在银川选择合适的居住区域?这些区域的发展和便利性如何?
“把大象装进冰箱”:一个语言游戏背后的思维奥秘
财会人员离职交接工作有哪些注意事项?
适合演员的八字(什么样的八字多才多艺)
排列组合、概率问题与容斥原理详解
肾好不好,“尿”知道!建议这些人及时检查