Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sum columns with null values in oracle

Tags:

sql

oracle

I want to add two numbers together but when one of those numbers is null then the result is null. Is there a way around this. I could simply do it in the code but I would rather have it done in the query. This is a oracle database.

The table structure

hours_t type     craft    regular       overtime  A         1        5              0  A         1        3              1  B         2        9            <null>  B         1        4              4 

The query

select type, craft, sum(regular + overtime) as total_hours from hours_t group by type, craft order by type, craft 

The unwanted results

type   craft   total_hours   A      1          9   B      1          8   B      2        <null> 

The wanted results

type    craft   total_hours   A       1          9   B       1          8   B       2          9 
like image 527
Berek Bryan Avatar asked Feb 26 '09 13:02

Berek Bryan


2 Answers

NVL(value, default) is the function you are looking for.

select type, craft, sum(NVL(regular, 0) + NVL(overtime, 0) ) as total_hours from hours_t group by type, craft order by type, craft 

Oracle have 5 NULL-related functions:

  1. NVL
  2. NVL2
  3. COALESCE
  4. NULLIF
  5. LNNVL

NVL:

NVL(expr1, expr2) 

NVL lets you replace null (returned as a blank) with a string in the results of a query. If expr1 is null, then NVL returns expr2. If expr1 is not null, then NVL returns expr1.

NVL2 :

NVL2(expr1, expr2, expr3) 

NVL2 lets you determine the value returned by a query based on whether a specified expression is null or not null. If expr1 is not null, then NVL2 returns expr2. If expr1 is null, then NVL2 returns expr3.

COALESCE

COALESCE(expr1, expr2, ...) 

COALESCE returns the first non-null expr in the expression list. At least one expr must not be the literal NULL. If all occurrences of expr evaluate to null, then the function returns null.

NULLIF

NULLIF(expr1, expr2) 

NULLIF compares expr1 and expr2. If they are equal, then the function returns null. If they are not equal, then the function returns expr1. You cannot specify the literal NULL for expr1.

LNNVL

LNNVL(condition) 

LNNVL provides a concise way to evaluate a condition when one or both operands of the condition may be null.

More info on Oracle SQL Functions

like image 169
zendar Avatar answered Sep 19 '22 05:09

zendar


select type, craft, sum(nvl(regular,0) + nvl(overtime,0)) as total_hours from hours_t group by type, craft order by type, craft 
like image 35
Tony Andrews Avatar answered Sep 19 '22 05:09

Tony Andrews