经常有NVL()和SUM()等统计求和的情况,来来回回,有时清楚有时糊涂,今天看到一个文章总结的很好,摘录下来:http://hi.baidu.com/fly_mitac/blog/item/6541e8595c1f7c3b2834f0d4.html
实例,假如A班全班都未参加数学考试,则下面SQL返回结果为null,而不是期望的0。
select sum(nvl(score,0))
from my_score
where class = 'A'
and subject = 'Math'
而修改为下面SQL,才能返回结果为0。
select nvl(sum(socre),0)
from my_score
where class = 'A'
and subject = 'Math'
原因是,sum函数的返回值。在没有满足条件的记录时,是不进行汇总的,sum直接返回null.
当sum函数的统计对象部分为null时,返回值是数值。
总结:NVL的使用出现率其实算是比较高的,在一些财务报表中,都不会简单的显示一个汇总栏位的,都要在结果上进行复杂的数学运算。所以,保证每个栏位都有值是基本。因为任何数加null,都等于null,所以一旦有栏位为null,则与其相关的其他运算数据,都没了意义。
唉,程序员真的挺辛苦的。为了避免Debug的烦恼,遇到有结果需要进行运算时,随手加上NVL函数吧,加多了没坏处。[上面例子可以写成nvl(sum(nvl(score,0)),0) 双保险,执行速度的变化是人为体会不到的,可以忽略不计。 O(∩_∩)O~ ]
分享到:
相关推荐
在数据库管理领域,Oracle 和 MySQL 是两种广泛应用的关系型数据库管理系统(RDBMS)。它们各自拥有丰富的函数库,以满足各种数据处理需求。Oracle 中有一个非常实用的函数 `NVL`,用于处理空值(NULL)的情况。那么...
Oracle数据库是一种广泛应用于企业级应用的大型关系型数据库管理系统,其功能强大且复杂。本文将主要探讨Oracle数据库中两个重要的函数:NVL和DECODE,以及如何利用它们进行数据处理和转换。 NVL函数在Oracle数据库...
数据文件(data files)与表空间的关系** - **数据文件**: 存储表空间中数据的实际物理文件。 - **表空间**: 数据文件的逻辑分组。 **2. 自动扩展(autoextend)与最大大小(maxsize)** - **自动扩展**: 表示...
SELECT NVL(C1, '合计'), SUM(C2) FROM B GROUP BY ROLLUP (C1); ``` ### 5. 数据库规范化介绍 - **问题描述**:介绍数据库规范化的三个阶段(1NF、2NF、3NF)。 - **规范化概念**: - **1NF(第一范式)**:...
- 组函数如`COUNT`, `SUM`, `AVG`, `MAX`, `MIN`等用于对一组数据进行聚合计算,不能直接与null值处理函数`NVL`, `NVL2`, `COALESCE`一起用于组函数,除非在组函数外层使用。 5. **日期和时间操作**: - `BETWEEN...
Oracle 9i是一款关系型数据库管理系统,用于存储和管理企业级的数据。在这些笔试题中,我们可以看到一些关于SQL查询的基础知识,这是操作Oracle数据库的关键技能。以下是对这些问题的详细解答: 1. 要将部门名称...
在Oracle数据库管理中,了解和监控表空间的利用率是至关重要的任务之一,它直接关系到数据库性能、存储管理和数据安全。本文将详细解析三个用于查看Oracle表空间利用率的SQL脚本,这些脚本能帮助数据库管理员(DBA)...
Oracle数据库管理系统是企业级的关系型数据库系统,广泛用于存储和管理海量数据。在数据库的日常运维中,确保表空间的有效管理至关重要。表空间是Oracle数据库中存储数据的主要逻辑单元,它由一个或多个数据文件组成...
(b.bytes-SUM(NVL(a.bytes,0)))/1024/1024 USEDm, SUM(NVL(a.bytes,0)/1024/1024) REMAINEDM, SUM(NVL(a.bytes,0)/(b.bytes)*100), (100-(SUM(NVL(a.bytes,0))/(b.bytes)*100)) FROM dba_free_space a, dba_...
Oracle是一种广泛使用的关系型数据库管理系统,对于初学者来说,了解其基本概念和操作至关重要。本文将深入探讨Oracle数据库的一些核心知识点,包括进程、线程、SQL语句中的空值处理、查询技巧以及数据库的启动与...
TO_CHAR(NVL(a.bytes / 1024 / 1024, 0), '99999999') "SUM(MB)", TO_CHAR(NVL(t.bytes, 0) / 1024 / 1024, '999999999') "USED(MB)", TO_CHAR(NVL(t.bytes / a.bytes * 100, 0), '990.00') "USED(%)", (a.bytes...
Oracle 数据库系统是企业级的关系型数据库管理系统,广泛应用于数据管理与分析。在这个在线期中考试中,涉及到了多个 SQL(结构化查询语言)相关的知识点,主要包括查询语句、函数和操作符的使用。 1. **SELECT ...
SELECT NVL(SUM(t.dwxhl), 1) FROM tb_jhdet WHERE zydm = -1; ``` 此查询将计算`t.dwxhl`字段的总和,如果该总和为NULL,则返回1。NVL函数确保了在处理汇总或计算时不会因NULL值而中断。 #### 2. Decode函数 ...
**NULL和单行函数**的关系复杂,任何涉及NULL的操作通常会产生NULL结果,除非使用了专门处理NULL的函数。在UPDATE语句中,如需计算薪水与奖金的总和,必须考虑到可能存在的NULL值。例如,`salary + nvl(bonus, 0)`会...
7. **聚合函数与NULL**:SUM、AVG等聚合函数在计算时会忽略NULL值,COUNT(*)会统计所有行,而COUNT(column)仅统计column非NULL的行。 8. **NULL联合**:在UNION、UNION ALL等操作中,NULL值的处理方式不同。UNION会...
Oracle数据库管理系统是企业级的关系型数据库,其中表空间(Tablespace)是存储数据的主要单位。本文将详细讨论如何查询和操作Oracle的表空间,以及创建表空间和UNDO表空间的方法。 **一、表空间查询** 1. **查询...
在SQL中,可以使用多个子查询和复杂的联接来处理多表之间的关系。 **示例代码:** ```sql SELECT A.num, A.name, B.upd_date, B.prev_upd_date FROM table1 JOIN ( SELECT X.num, X.upd_date, Y.upd_date AS prev_...
在数据库管理领域,SQL Server和Oracle都是广泛应用的关系型数据库系统,它们都提供了丰富的函数来处理数据。本篇文章将深入探讨SQL Server与Oracle中常用函数的对比,帮助读者更好地理解和运用这两种数据库。 一、...