#需求:判断数据条件是否符合金额正常
#瓶颈:两张表数据量都比较大,关联查询的话 查询效率很低
SELECT *
FROM emp
WHERE comm IS NOT NULL;
+-------+--------+----------+------+------------+---------+---------+--------+
| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
+-------+--------+----------+------+------------+---------+---------+--------+
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 |
| 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 |
| 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 |
+-------+--------+----------+------+------------+---------+---------+--------+
问题: 如何使用SQL查询来判断数据中的金额是否符合正常范围?
根据给定的参考资料,可以利用SQL的case when语句进行判断。根据奖金类型btype的不同,计算奖金金额bonus,并与薪水salary进行比较。
其中,奖金类型为1时,奖金为薪水salary的10%;奖金类型为2时,奖金为薪水salary的20%;其他类型的奖金为薪水salary的30%。
具体的查询语句如下:
SELECT eb.emp_no, e.first_name, e.last_name, eb.btype, s.salary,
(CASE eb.btype
WHEN 1 THEN s.salary*0.1
WHEN 2 THEN s.salary*0.2
ELSE s.salary*0.3
END) AS bonus
FROM emp_bonus AS eb
JOIN employees AS e
ON eb.emp_no = e.emp_no
JOIN salaries AS s
ON eb.emp_no = s.emp_no
WHERE s.to_date = '9999-01-01';
以上查询语句将会返回符合条件的数据,其中包括员工号(emp_no)、员工姓名(first_name和last_name)、奖金类型(btype)、当前薪水(salary)以及计算得出的奖金金额(bonus)。
这样,我们就可以根据查询结果判断数据中的金额是否符合正常范围。