zoukankan      html  css  js  c++  java
  • Mysql 聚合函数返回NULL

    【1】聚合函数返回NULL

    当where条件不满足时,聚合函数sum()、avg()的返回值为NULL。

    (1)源数据表

    (2)如下SQL语句

    SELECT sClass,
    COUNT(*) AS total,
    AVG(sChina) AS avg_china, 
    AVG(sMath) AS avg_math, 
    AVG(sEnglish) AS avg_english
    FROM grades 
    WHERE sClass = '080601'

    (3)实际结果:

    温馨提醒:如果不想要这行NULL值的结果集,可以参见随笔《Mysql AVG() 值返回NULL而非空结果集

    【2】解决方案

    因为某种需要,我们实在不想出现NULL这个值,想用0表示,可怎么处理呢?

    有三种方式:

    (1)如下SQL语句

    SELECT sClass,
    COUNT(*) AS total,
    IFNULL(AVG(sMath), 0) AS avg_math,  # 方式一
    COALESCE(AVG(sEnglish), 0) AS avg_english, # 方式二
    CASE WHEN ISNULL(AVG(sChina)) THEN 0 ELSE AVG(sChina) END AS avg_china  # 方式三
    FROM grades 
    WHERE sClass = '080601';

    (2)实际结果

    【3】小数位数

    如上结果,比较介怀,为什么avg函数的后面那么多小数位数,想要保留若干位数,又怎么处理呢?

    使用ROUND进行四合五入:

    (1)如下SQL语句

    SELECT sClass,
    COUNT(*) AS total,
    ROUND(IFNULL(AVG(sMath), 0), 1) AS avg_math,  # 保留一位
    ROUND(COALESCE(AVG(sEnglish), 0), 2) AS avg_english, # 保留两位
    CASE WHEN ISNULL(AVG(sChina)) THEN 0 ELSE AVG(sChina) END AS avg_china # 保留四位
    FROM grades 
    WHERE sClass = '080604'

    (2)实际结果


    Good Good Study, Day Day Up.
    顺序 选择 循环 总结

  • 相关阅读:
    洛谷P1085 不高兴的津津
    为什么要学习算法
    洛谷P1001 A+B Problem
    计算机问题求解周期
    洛谷P1000 超级玛丽游戏
    洛谷P1421 小玉买文具
    CF359D Pair of Numbers(ST+二分)
    2020.10.7
    2020.10.10
    2020.10.8
  • 原文地址:https://www.cnblogs.com/Braveliu/p/10771962.html
Copyright © 2011-2022 走看看