【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. hadoop2-hive

    hadoop2-hive 1.What,Why,How? 1.Hive是数据仓库,在MySQL或其他关系型数据库中存放元数据信息,而把真正的Data存放在HDFS上面. 2.主要使用Hive来对历史数 ...

  2. Linux 内核参数 arp_ignore & arp_announce 详解

    arp_ignore定义了对目标地址为本机IP的ARP询问的不同应答模式. arp_announce对网络接口(网卡)上发出的ARP请求包中的源IP地址作出相应的限制:主机会根据这个参数值的不同选择使 ...

  3. Java-IO流之输入输出流基础示例

    一.理论: 1.什么是输入输出? 输入输出的对象是数据,数据的存储区域是磁盘或者光盘等设备,我们知道还有一个存储数据的空间----内存,其中磁盘的速度比较慢,内存的速度比较快,把数据读入内存的动作称作 ...

  4. [LeetCode] Domino and Tromino Tiling 多米诺和三格骨牌

    We have two types of tiles: a 2x1 domino shape, and an "L" tromino shape. These shapes may ...

  5. vscode + electron 提示:无法连接到legacy请采用inspector解决办法

    首先,你的程序是可以直接运行的,在命令行中可以运行,只是在vsCode中,运行一段时间就被这个提示弹出. 解决方法: 先在launch.json 中加上"protocol":&qu ...

  6. JMM(java Memory Model)到底是什么?

    经历过很多面试大部分都会问一句: 你知道Java内存模型么?  然后我就pulapula的说一大堆什么堆呀,栈呀,GC呀什么的,这段时间把JVM虚拟机和多线程编程完整的学习了一遍,发现JMM和堆/栈这 ...

  7. Linux:ftp服务本地用户,虚拟用户配置

    本地用户 1. 修改ftp配置文件,  anonymous_enable=NO   默认为YES,修改为NO,禁止匿名访问, 监听端口,可以根据自己的需求修改,为了安全起见自定义为好 2. /etc/ ...

  8. python 科学计算与可视化

    一.Numpy 库 NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 引用: import ...

  9. MGR

    单主模式 参数修改 server_id=1 gtid_mode=ON enforce_gtid_consistency=ON binlog_checksum=NONE log_bin=binlog l ...

  10. 第一次C语言实验

    [实验感受]第一次实验感觉什么都还没有记住就要写小程序了,有些小着急.现在才发现c语言就是要在实践中掌握的,多敲点代码,多犯错误,就会明白其中的规则. 实验一:输入一个数判断奇数还是偶数,现在想想其实 ...