Mysql AVG() 值 返回NULL而非空结果集
【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而非空结果集的更多相关文章
- Mysql 聚合函数返回NULL
[1]聚合函数返回NULL 当where条件不满足时,聚合函数sum().avg()的返回值为NULL. (1)源数据表 (2)如下SQL语句 SELECT sClass, COUNT(*) AS t ...
- [sql]sql函数coalesce返回第一个非空的值
下面来看几个比较有用的例子: 首先,从MSDN上看看这个函数的使用方法,coalesce函数(下面简称函数),返回一个参数中非空的值.如: SELECT COALESCE(NULL, NULL, G ...
- 自动化测试用例getText()获取某一个元素的值返回null或空
问题描述 页面上一个元素无法获取它的值. 用getText() 获取该元素的值返回null或空. 根本原因 ? 需要更多了解dom结构 解决办法 用getAttribute("value&q ...
- MySQL进阶13--常见六大约束: 非空/默认/主键/唯一约束/检查约束/外键约束--表级约束 / 列级约束
/* MySQL进阶13 常见六大约束: 1.not null 非空 2.default :默认值,用于保证该字段的默认值 ; 比如年龄:1900-10-10 3.primary key : 主键,用 ...
- mySQL 约束 (Constraints):一、非空约束 NOT NULL 约束
非空约束 NOT NULL 约束: 强制列不能为 NULL 值,约束强制字段始终包含值.这意味着,如果不向字段添加值,就无法插入新记录或者更新记录. 1.在 "Persons" 表 ...
- mysql执行load_fle返回NULL的解决方法
mysql 版本: 5.7.18 问题: 在执行mysql 函数load_file时,该函数将加载指定文件的内容,存储至相应字段.如: SELECT LOAD_FILE("D:\aa.txt ...
- MySQL 字段值为NULL,PHP用json转换,传给js,显示null
这个问题出在php的json_encode环节,这个函数返回的json数据中会把空值写作null. 想通过在js端这样把null转为空字符串是不可以的: JSON.parse(JSON.stringi ...
- mysql字段值为null时排序问题
-- DESC 降序时候默认null值排在后面.ASC升序时默认null值排在前面,可使用 IS NULL处理 ORDER BY score desc,gmPrice IS NULL,gmPrice, ...
- Mybatis 返回值 返回Map的为空的值
第一种.springMVC和boot通用配置:(Mybatis.xml) <?xml version="1.0" encoding="UTF-8"?> ...
随机推荐
- React(七)独立组件间的共享Mixins
(1)ES6的使用 (https://github.com/brigand/react-mixin) 下载依赖包 npm i react-mixin --save (2)导入react-mixin包 ...
- IDEA_构建Maven项目报错(1)
构建报错: [ERROR] Plugin org.apache.maven.plugins:maven-archetype-plugin:RELEASE or one of its dependenc ...
- 04_ switch 练习 _ 你及格了吗
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- ECMA Script 6_函数的扩展
ES6规定只要函数参数使用了默认值.解构赋值.或者扩展运算符, 那么函数内部就不能显式设定为严格模式,否则会报错 1. 参数的默认值 ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面 函数 ...
- python dgango简介 安装 多表查询
一.socket服务器 import socket sk=socket.socket() sk.bind(("127.0.0.1",8890)) sk.listen() while ...
- 网络编程之socketserver以及socket更多方法
关于socketserver 关于socket的更多方法 服务端套接字函数: s.bind() 绑定(主机,端口号)到套接字 s.listen() 开始tcp监听 s.accept () 被动接受tc ...
- 【动态规划dp】青蛙的烦恼
青蛙的烦恼(frog) 原文:https://blog.csdn.net/xyc1719/article/details/79844952 [题目描述] 池塘中有 n 片荷叶恰好围成了一个凸多边形,有 ...
- 【OJ】抓牛问题
/* 农夫John的奶牛跑路了.将地图视作一条数轴,John的初始位置在s而奶牛的位置在t(0<=s,t<=100000).John可以花费一分钟的时间使自己作如下移动: 1 从点x移动到 ...
- Tengine+Lua+GraphicsMagick
狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! 使用 Tengine+Lua+GraphicsMagick 实现图片自动裁剪缩放 需求 : 图片 ...
- 在VM虚拟机中安装Centos操作系统
首先我们要下载 Centos https://www.centos.org/ 这个是Centos官方 最新版本 7 https://www.centos.org/download/ 提供有 DVD安 ...