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_Salary
为EMP_Comm
,则希望NULL
为总薪水。
答案 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