Я пытаюсь найти количество сотрудников с заданным диапазоном заработной платы c, используя процедуру магазина, я получаю результаты, но они не равны результатам простого запроса (второй запрос ниже), что означает, что магазин процедура не работает должным образом?
Я надеялся, что кто-то может мне помочь с этим.
- ОТВЕТ: NULL / нет суммы зарплаты меньше 38000, однако с процедурой магазина я я получаю 967330
Во-вторых, есть ли какой-либо другой способ сократить оператор case when внутри процедуры store? в текущей версии мне приходится каждый раз добавлять подзапрос.
имя базы данных: имя столбца сотрудников: зарплата employee_id = emp_no
DELIMITER $$
CREATE PROCEDURE SALARY_RANGE
(INOUT no_employees INT, IN salary INT)
BEGIN
CASE
WHEN (salary <= 38000) THEN (SELECT COUNT(emp_no) INTO no_employees
FROM salaries
WHERE salary <= 38000);
WHEN (salary<= 68000) THEN (SELECT COUNT(emp_no) INTO no_employees
FROM salaries
WHERE salary <= 68000);
WHEN (salary <= 88000) THEN (SELECT COUNT(emp_no) INTO no_employees
FROM salaries
WHERE salary <= 88000);
WHEN (salary <= 100000) THEN (SELECT COUNT(emp_no) INTO no_employees
FROM salaries
WHERE salary <= 100000);
ELSE (SELECT COUNT(emp_no) INTO no_employees
FROM salaries WHERE salary > 100000);
END CASE;
END$$
CALL SALARY_RANGE(@finding_salary_range_count,'38000')$$
select @finding_salary_range_count;
-- to check the if the answer matched the above store procedure
select count(case when salary <= 88000 then emp_no else null end) as count_sal
from salaries;