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

SQL168 统计作答次数

描述

有一个试卷作答记录表exam_record,请从中统计出总作答次数total_pv、试卷已完成作答数complete_pv、已完成的试卷数complete_exam_cnt。

示例数据 exam_record表(uid用户ID, exam_id试卷ID, start_time开始作答时间, submit_time交卷时间, score得分):

示例输出:

解释:表示截止当前,有11次试卷作答记录,已完成的作答次数为7次(中途退出的为未完成状态,其交卷时间和份数为NULL),已完成的试卷有9001和9002两份。

selectcount(exam_id) as total_pv,count(submit_time) as complete_pv,count(distinct if(submit_time is not null, exam_id, null)) as complete_exam_cnt
fromexam_record

重点解析:COUNT(DISTINCT IF(...)) 用法

让我们深入讲解这个复杂的表达式:

COUNT(DISTINCT IF(submit_time IS NOT NULL, exam_id, NULL)) AS complete_exam_cnt

🎯 最终目的

统计有多少种不同的试卷被成功完成过

🔍 逐步拆解

第一步:理解 IF 函数

IF(submit_time IS NOT NULL, exam_id, NULL)

这是一个条件判断函数,相当于Excel中的IF函数:

条件结果
如果 submit_time 不为空返回 exam_id
如果 submit_time 为空返回 NULL

💡 简单说:只保留那些"已完成考试"的记录,未完成的标记为NULL

第二步:DISTINCT 去重

DISTINCT IF(...)
  • 只保留唯一的、非NULL的值
  • 相同的 exam_id 只算一次
  • 所有的 NULL 值被忽略

第三步:COUNT 计数

COUNT(...)

统计去重后非NULL值的数量。

📊 实际执行过程

假设原始数据:

exam_idsubmit_time
1012023-01-01 10:00
1012023-01-01 11:00
102NULL
1032023-01-02 09:00
1032023-01-02 10:00
1032023-01-02 11:00

执行步骤:

  1. 应用IF函数

    101  (因为submit_time不为空)
    101  (因为submit_time不为空)  
    NULL (因为submit_time为空)
    103  (因为submit_time不为空)
    103  (因为submit_time不为空)
    103  (因为submit_time不为空)
  2. DISTINCT去重

    101
    103
    NULL  (NULL被忽略)
  3. COUNT计数

    • 非NULL的唯一值有2个:101和103
    • 结果:2

💡 为什么这样设计?

这种写法巧妙地解决了三个问题:

  1. 过滤未完成的考试(通过IF判断)
  2. 去重(相同试卷ID只算一次)
  3. 排除NULL值(未完成的记录不计入)
http://www.dtcms.com/a/317988.html

相关文章:

  • 简单介绍cgroups以及在K8s中的应用
  • DM数据库的安全版本SYSDBA无法修改其他用户密码?
  • 2025年COR SCI2区,船载AUV协同调度优化+海上风电机组水下检测,深度解析+性能实测
  • GPT-oss开源:200万小时淬炼AI Agent专属商用引擎
  • Vi与Vim的主要区别总结
  • Linux systemd 服务管理与 Firewall 防火墙配置
  • 【论文分析】【Agent】SEW: Self-Evolving Agentic Workflows for Automated Code Generatio
  • 从零开始的云计算生活——第三十八天,避坑落井,Docker容器模块
  • 《RedisTemplate 核心操作全解析》
  • 家庭宽带中的服务器如何被外网访问?
  • 无法解析 CentOS 官方镜像源的域名
  • 977.有序数组的平方
  • 什么是回调地址
  • 8、项目管理
  • PI 思维升级 解密电容器的选择与布局策略,带您追求极致平坦的电源阻抗
  • 个人自然人可不可以申请注册商标!
  • 2025国赛数学建模C题详细思路模型代码获取,备战国赛算法解析——决策树
  • Python Day24 多线程编程:核心机制、同步方法与实践案例
  • Lesson 33 Out of the darkness
  • 开疆智能ModbusTCP转Profinet网关连接EPSON机器人配置案例
  • c# winform 调用 海康威视工业相机(又全又细又简洁)
  • 字典树trie
  • 技术博客:从HTML提取到PDF生成的完整解决方案
  • 奔图P2500NW打印机手机无线连接方法
  • 强化应急通信生命线:遨游三防平板、卫星电话破局极端灾害救援
  • 2.6 sync
  • 2024年测绘程序设计比赛--空间探索性分析(数据为2025年第三次模拟数据)
  • 第二十六天(数据结构:树(补充版程序请看下一篇))
  • 【数据结构与算法】刷题篇——环形链表的约瑟夫问题
  • tmux.conf配置-简易版