当前位置: 首页 > news >正文

SQL刷题笔记——高级条件语句

目录

1题目:SQL149 根据指定记录是否存在输出不同情况

2 作答解析

3 知识点

3.1 count函数

3.2 内连接与左连接


1题目:SQL149 根据指定记录是否存在输出不同情况

2 作答解析

#正确答案
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种uidgroup by ui.uid, ui.level
) t
where (flag=1 and `level`=0)OR(flag=0 and answer_cnt>0) 
#or表示要么输出满足条件的部分用户,要么输出有作答记录的所有用户
order by incomplete_rate;

3 知识点

3.1 count函数

在 SQL 中,COUNT() 函数的计算规则是:

  • COUNT(*) 会计算所有行,不管其中的值是否为 NULL。
  • COUNT(表达式) 或 COUNT(字段) 只会计算非 NULL 的值,即 NULL 值会被排除在计数之外。

3.2 内连接与左连接

 1)内连接:只两个表保留相同的

2)左连接:合并后左边的表所有行都保留,若左边的表有空值则删除(即删除右边没有匹配上的)

此题中,如果是内连接,只能得到ui和er都有的数据表:

由题可知,er中只有1001,1002,1003这几个uid,如用内连接则丢失了1004,1005,1006这几个uid。

但如果是左连接,则会保证左边的表即ui中的数据都保留,:

http://www.lryc.cn/news/516932.html

相关文章:

  • 与 Oracle Dataguard 相关的进程及作用分析
  • 游戏语音趋势解析,社交互动有助于营造沉浸式体验
  • 美食烹饪互动平台
  • 【51单片机零基础-chapter5:模块化编程】
  • Redis中的主从/Redis八股
  • ROS笔记
  • 在 Linux 上调试 C++ 程序
  • 让跨 project 联查更轻松,SLS StoreView 查询和分析实践
  • 20240107-类型转换
  • 关于Linux PAM模块下的pam_listfile
  • OKHttp调用第三方接口,响应转string报错okhttp3.internal.http.RealResponseBody@4a3d0218
  • 弱电与电力工程领域,如何通过工程项目管理软件提升效率
  • 引领实时数据分析新时代:阿里云实时数仓 Hologres
  • 什么是中间件中间件有哪些
  • css中的部分文字特性
  • PyQt5 UI混合开发,控件的提升
  • IP查询于访问控制保护你我安全
  • SpringBoot数据层解决方案
  • 前端数据模拟器 mockjs 和 fakerjs
  • Python 类 Class
  • PHP语言的并发编程
  • 小米智能哑铃上市,代理 IP 视角下的智能健身新篇
  • 业务日志设计
  • 对话|全年HUD前装将超330万台,疆程技术瞄准人机交互“第一屏”
  • 【论文笔记】QLoRA: Efficient Finetuning of Quantized LLMs
  • 计算机网络之---物理层的基本概念
  • Burpsuite20241102macM1版安装
  • 缓存常见问题
  • C++ 入门第25天:线程池(Thread Pool)基础
  • 微信小程序中的 storage(本地存储)和内存是两个完全不同的存储区域