【1】select 查询返回一行NULL

先来模拟复现一下遇到的问题。

(1)源数据表grades,学生成绩表

(2)查询SQL语句

查询‘080601’班的各门课平均成绩

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

(3)实际结果

(4)期望结果

如果没有满足条件的记录,期望返回无结果集,而不是有一行NULL结果集。

【2】分析原因

第一反应,当条件满足时,会不会有这行NULL呢?

请看这个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 = '';

结果:

很明显,没有那么一行NULL值。

经分析:

如果所查询的表 或 where条件筛选后得到的结果集为空,那么聚合函数sum() 或 avg()的返回值为NULL;count()函数的返回值为0

验证一下,假如我们不加这个avg函数呢?

请看这个SQL:

SELECT sClass,
COUNT(*) AS total
FROM grades
WHERE sClass = '';

结果:

看来,只要有聚合函数,当where条件结果集为空时,应该都会生成这么一行NULL值记录项。

【3】解决方案

经查询,找到了一种处理方法:在Sql语句的最后加上GROUP BY NULL;

修改如上语句,例如:

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

结果:

满足需求。好,很好,这样就会避免一个坑。

没有完,再想想,假如where条件满足筛选出结果集,那么加GROUP BY NULL会有什么“隐患”吗?

请看验证过程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 = '';
GROUP BY NULL;

实际结果:

看起来,貌似没有其他隐患。

暂且如上。

Good Good Study, Day Day Up.

顺序  选择  循环 总结

Mysql AVG() 值 返回NULL而非空结果集的更多相关文章

  1. Mysql 聚合函数返回NULL

    [1]聚合函数返回NULL 当where条件不满足时,聚合函数sum().avg()的返回值为NULL. (1)源数据表 (2)如下SQL语句 SELECT sClass, COUNT(*) AS t ...

  2. [sql]sql函数coalesce返回第一个非空的值

    下面来看几个比较有用的例子: 首先,从MSDN上看看这个函数的使用方法,coalesce函数(下面简称函数),返回一个参数中非空的值.如: SELECT  COALESCE(NULL, NULL, G ...

  3. 自动化测试用例getText()获取某一个元素的值返回null或空

    问题描述 页面上一个元素无法获取它的值. 用getText() 获取该元素的值返回null或空. 根本原因 ? 需要更多了解dom结构 解决办法 用getAttribute("value&q ...

  4. MySQL进阶13--常见六大约束: 非空/默认/主键/唯一约束/检查约束/外键约束--表级约束 / 列级约束

    /* MySQL进阶13 常见六大约束: 1.not null 非空 2.default :默认值,用于保证该字段的默认值 ; 比如年龄:1900-10-10 3.primary key : 主键,用 ...

  5. mySQL 约束 (Constraints):一、非空约束 NOT NULL 约束

    非空约束 NOT NULL 约束: 强制列不能为 NULL 值,约束强制字段始终包含值.这意味着,如果不向字段添加值,就无法插入新记录或者更新记录. 1.在 "Persons" 表 ...

  6. mysql执行load_fle返回NULL的解决方法

    mysql 版本: 5.7.18 问题: 在执行mysql 函数load_file时,该函数将加载指定文件的内容,存储至相应字段.如: SELECT LOAD_FILE("D:\aa.txt ...

  7. MySQL 字段值为NULL,PHP用json转换,传给js,显示null

    这个问题出在php的json_encode环节,这个函数返回的json数据中会把空值写作null. 想通过在js端这样把null转为空字符串是不可以的: JSON.parse(JSON.stringi ...

  8. mysql字段值为null时排序问题

    -- DESC 降序时候默认null值排在后面.ASC升序时默认null值排在前面,可使用 IS NULL处理 ORDER BY score desc,gmPrice IS NULL,gmPrice, ...

  9. Mybatis 返回值 返回Map的为空的值

    第一种.springMVC和boot通用配置:(Mybatis.xml) <?xml version="1.0" encoding="UTF-8"?> ...

随机推荐

  1. mac 配置 ssh 到git (Could not resolve hostname github.com, Failed to connect to github.com port 443 Operation timed out)

    1.进入终端命令行 (1)输入:cd .ssh/ 进入到.ssh后,输入ls,会输出“known_hosts”,如果没有创建过rsa的话 (2)输入:man ssh-add (3)输入:ssh-key ...

  2. 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第5章编程练习7

    #include <iostream>#include <cstring>const MAXSIZE=100;using namespace std;int main (){  ...

  3. goroutine 和线程的区别

    好久没写点儿啥了,强行更新一下. 1,从使用上讲 1,goroutine 比线程更轻量级,可以创建十万.百万不用担心资源问题. 2,goroutine 和 chan 搭配使用,实现多线程.高并发 实现 ...

  4. Java HotSpot(TM) 64-Bit Server VM warning

    Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000007e4200000, 467140608, 0) ...

  5. UIButton设置标题左对齐

    Button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;//左对齐(UIControlContentHo ...

  6. mobile_基础事件

    DOM0 级事件模型(模拟器不支持) DOM0 级事件绑定 在 移动端有 300ms 的延迟 ontouchstart 手指按下事件 ontouchmove 手指移动事件 pntouchend 手指离 ...

  7. 华大单片机开发板HC32L13X上手入门

    HC32L136开发板(如下图所示)分为板载调试模块(左半部分)和MCU开发电路(右半部分).二者中间通过邮票孔相连,如果将板子从中间掰开,板载调试模块就可以当一个CMSIS-DAP的仿真器来使用.此 ...

  8. Python自动化培训第一周学习总结

    Python自动化培训第一周学习结束,看视频复习,把作业完成了. 总体来说,开卷有益. 首先,工具真是好东西,能够极大提升效率,也是人区别于动物所在.想起前任大领导对工具的不屑,本质也是对效率的不屑, ...

  9. c#4.8-4.11学习总结

    4.8讲的是static 关键字.它用于修饰类 ,字段 ,属性,方法和构造方法等.被它修饰的类称为静态类,成员称为静态成员.  先说静态字段,它是普通字段前面加个static,它不属于任何对象,只属于 ...

  10. 10 Project 1: Erste Schritte in Python

    10 Project 1: Erste Schritte in PythonAnimationIn den Projekten werden sie nicht nur statische Objek ...