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
值的方式:
- COUNT:COUNT(*) 计算所有行的数量,包括 NULL 值。COUNT(column) 只计算指定列中非 NULL 值的数量。
- SUM:计算指定列中所有非 NULL 值的总和。NULL 值在求和过程中被视为零,但不会增加计数。
- AVG:计算指定列中所有非 NULL 值的平均值。NULL 值在计算平均值时被忽略。
- MIN 和 MAX:分别找出指定列中的最小值和最大值,忽略 NULL 值。
- GROUP_CONCAT:连接组中的值,忽略 NULL 值。
在所有这些情况下,NULL
值被视为“不存在”的值,因此不会对聚合函数的结果产生直接影响。这是 SQL 标准的一部分,旨在处理数据库中的不完整或缺失数据。
加油