Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 存储过程没有给出正确的值_Mysql_Sql_Stored Procedures - Fatal编程技术网

Mysql 存储过程没有给出正确的值

Mysql 存储过程没有给出正确的值,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,我试图使用存储过程查找具有特定薪资范围的员工人数,我得到的结果与简单查询(下面的第二个查询)的结果不相等,这意味着存储过程工作不正常 我希望有人能帮我 --回答:空/没有低于38000的工资金额,但是通过存储过程,我得到967330 第二,当语句在存储过程中出现时,有没有其他方法可以缩短这种情况?在当前版本中,每次都必须添加子查询 数据库名称:employees 栏目名称:工资 员工id=环境管理计划编号 DELIMITER $$ CREATE PROCEDURE SALARY_RANGE (I

我试图使用存储过程查找具有特定薪资范围的员工人数,我得到的结果与简单查询(下面的第二个查询)的结果不相等,这意味着存储过程工作不正常

我希望有人能帮我

--回答:空/没有低于38000的工资金额,但是通过存储过程,我得到967330

第二,当语句在存储过程中出现时,有没有其他方法可以缩短这种情况?在当前版本中,每次都必须添加子查询

数据库名称:employees 栏目名称:工资 员工id=环境管理计划编号

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;
分隔符$$
创建程序薪资范围
(不含员工整数,不含工资整数)
开始
案例

当(薪水时,我希望代码如下:

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;
创建程序薪资范围(
OUT_num_employees INT,
IN_工资INT
)
开始
选择计数(emp\u no)输入输出员工数
来自工资
工资在哪里