процедура хранения не дает правильных значений - PullRequest
0 голосов
/ 11 июля 2020

Я пытаюсь найти количество сотрудников с заданным диапазоном заработной платы 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;

1 Ответ

1 голос
/ 11 июля 2020

Я бы ожидал такого кода:

CREATE PROCEDURE SALARY_RANGE (
    OUT out_num_employees INT,
    IN in_salary INT
)
BEGIN
    SELECT COUNT(emp_no) INTO out_num_employees 
    FROM salaries 
    WHERE salary <= in_salary or in_salary IS NULL
END;

Я не вижу необходимости в нескольких инструкциях SELECT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...