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 标准的一部分,旨在处理数据库中的不完整或缺失数据。

加油