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中的数据都保留:
热门推荐
小猫斗殴,及时干预,和谐共处。
开封大刀面:传统名吃的历史与制作工艺
肠易激综合征的成因与预防
国产工业软件与国外工业软件优势和劣势(SWOT 分析)
探索兵学世家:孙武与孙膑的关系及其军事遗产
供暖结束,呼吸道“闹脾气”?中医良方助力轻松应对
猫咪叫声多样,揭秘宠物沟通密码
成人英语学习指南:从教材选择到考试准备
文物“话”春节:从压胜钱到电子红包,解读春节文化的千年传承
私家车一般多少公里换一次轮胎?有何注意事项?一文说清楚
搭乘港铁做了这些事,最高可被罚5000港元
退税赡养老人的条件及填报指南
二手车市场:入门级车型价格下滑 高端车型保值率稳定
凤凰古城自由行全攻略:省心省钱玩透湘西明珠
婴儿哭声详解:教你如何通过哭声判断宝宝需求
告别白粥馒头!三种营养早餐让孩子上课更专注
早餐吃什么有营养又健康?这份儿童营养早餐指南请收好
转膜:生物实验中的关键技术,助力精准科研
三亚深度游指南:揭秘最繁华区域、最漂亮景点与最佳居住区!
窗户 “新装备”:反射聚酯薄膜,高效节能新选择
最聪明的狗:认识十大犬种的智商排行榜
粒子(颗粒)碰撞噪声检测(PIND)技术详解
网络安全如何防范摄像头
人工智能与机器学习在图像处理中的融合与应用
矿业机电工程师高薪名企招聘信息都在哪里发布?
如何做名著读书笔记?高效提升阅读:名著读书笔记实用指南!
夏季养生佳肴:羊肉的五大滋补功效与适量食用指南
电脑怎么返回桌面?Win10/11通用快捷键和"骚操作"分享
春天又想染头发了,推荐“8款”好看又时髦的发色,真的是巨显白
C语言如何快速找到答案