工薪总额

时间:2015-03-09 00:49:01

标签: sql

Employee (emp_fname, emp_lname, emp_salary, emp_comm, emp_salary, emp_comm)

在这里,每个员工都有薪水,但有些人有佣金(其他方面是NULL)。

需要在sql中编写一个查询,计算所有员工的总薪水(加上工资和佣金),其中一些员工没有获得佣金(佣金为NULL)。

我试过

SELECT emp_fname, emp_lname, emp_salary, emp_comm, emp_salary+emp_comm "Total Salary"
FROM employee;

它给出了一个有薪水和佣金的人,但是对于那些委托NULL而不是任何号码的所有其他人来说NULL

我得到了..

(EMP_FNAME,EMP_LNAME,EMP_SALARY,EMP_COMM,"Total_Salary)
('Steve','Allen',1600,300,1900)
('Sue','Miller',1300,null,null)

但如果EMP_SalaryEMP_Comm,则希望NULL为总薪水。

1 个答案:

答案 0 :(得分:3)

null未知,因此1 + unkownn = unknown(不是1)。

您必须将零替换为null。一种方法是coalesce函数:

select emp_fname,
       emp_lname,
       emp_salary,
       emp_comm,
       emp_salary + coalesce(emp_comm, 0) as total_salary
  from employee

coalesce可用于为空值指定多个替换(按优先顺序排列,如果第2个也为空,则尝试第3个,然后是第4个,等等,直到非空值为止达到了)并且在大多数数据库中都有效。

如果要将null替换为一个值,并且总是一个值通常由其他函数实现,但它取决于数据库。 nvl将在Oracle中使用,isnull将在sql server中使用,ifnull将在mysql中使用。请参阅:http://www.w3schools.com/sql/sql_isnull.asp