题解 | #统计作答次数#

统计作答次数

https://www.nowcoder.com/practice/45a87639110841b6950ef6a12d20175f

SELECT COUNT(start_time) total_pv, 
        COUNT(score) complete_pv,
        # COUNT(DISTINCT (CASE WHEN score is null THEN null ELSE exam_id END)) complete_exam_cnt
        # COUNT(DISTINCT (CASE score WHEN NULL THEN null ELSE exam_id END)) complete_exam_cnt

        # COUNT(DISTINCT (if(score is null , null, exam_id))) complete_exam_cnt
        COUNT(DISTINCT exam_id AND score is not null) complete_exam_cnt
FROM exam_record;

重点:条件选择,聚合函数对于null的处理

条件选择语句:CASE WHEN、if

CASE WHEN有两种形式:

1.CASE column WHEN value1 THEN result1 ELSE result2 END

2.CASE WHEN exper TEHN result1 ELSE result2 END

if的形式:

IF( expr1 , result1 , result2 )

在 SQL 中,聚合函数通常会忽略 NULL 值,除非特别指定。这意味着 NULL 值不会被计入聚合函数的计算。下面是一些常见聚合函数和它们处理 NULL 值的方式:

  1. COUNT:COUNT(*) 计算所有行的数量,包括 NULL 值。COUNT(column) 只计算指定列中非 NULL 值的数量。
  2. SUM:计算指定列中所有非 NULL 值的总和。NULL 值在求和过程中被视为零,但不会增加计数。
  3. AVG:计算指定列中所有非 NULL 值的平均值。NULL 值在计算平均值时被忽略。
  4. MIN 和 MAX:分别找出指定列中的最小值和最大值,忽略 NULL 值。
  5. GROUP_CONCAT:连接组中的值,忽略 NULL 值。

在所有这些情况下,NULL 值被视为“不存在”的值,因此不会对聚合函数的结果产生直接影响。这是 SQL 标准的一部分,旨在处理数据库中的不完整或缺失数据。

加油

全部评论
COUNT(DISTINCT (CASE score WHEN NULL THEN null ELSE exam_id END)) complete_exam_cnt不报错但是通不过用例,是因为SQL 中的 NULL 是一个特殊的值,表示“未知”或“不存在”的数据。当试图使用 WHEN NULL 这样的条件时,它实际上并不会匹配任何 NULL 值,因为在 SQL 中 NULL 与任何值的比较(包括其自身)都会返回 false。
点赞 回复 分享
发布于 2024-01-02 14:40 北京

相关推荐

tongx_:海投吧同学,面试中能学到更多东西呢,比如拷打项目,要是觉得没准备好就可以从中厂开始呢,但是腾讯都是无限复活
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务