Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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 在存储过程的SUM()中使用CASE语句_Mysql_Stored Procedures - Fatal编程技术网

Mysql 在存储过程的SUM()中使用CASE语句

Mysql 在存储过程的SUM()中使用CASE语句,mysql,stored-procedures,Mysql,Stored Procedures,这是我的密码: BEGIN SELECT SUM( CASE WHEN first_name > '' THEN 1 ELSE 0 END AS a CASE WHEN last_name > '' THEN 1 ELSE 0 END AS b, CASE WHEN country > '' THEN 1 ELSE 0 END AS c, CASE WHEN state > '

这是我的密码:

BEGIN

    SELECT SUM(
       CASE WHEN first_name > '' THEN 1 ELSE 0 END AS a 
       CASE WHEN last_name > '' THEN 1 ELSE 0 END AS b,             
       CASE WHEN country > '' THEN 1 ELSE 0 END AS c, 
       CASE WHEN state > '' THEN 1 ELSE 0 END AS d, 
       CASE WHEN city > '' THEN 1 ELSE 0 END AS e)
    AS total
    FROM employee_profile     
    WHERE id = user_id_in;

END
这将生成以下错误:

您的SQL语法有错误,请查看与您的MySQL服务器版本对应的手册,以了解在第一行中使用的正确语法


有人能帮我找到正确的语法吗


MySQL服务器版本:5.5.8

SUM
接受一个参数(/column),它跨多行求和,而不是对一行求和多个参数(/column),这就是它不起作用的原因

这应该起作用:

SELECT (CASE WHEN first_name > '' THEN 1 ELSE 0 END +
        CASE WHEN last_name  > '' THEN 1 ELSE 0 END +
        CASE WHEN country    > '' THEN 1 ELSE 0 END +
        CASE WHEN state      > '' THEN 1 ELSE 0 END +
        CASE WHEN city       > '' THEN 1 ELSE 0 END) AS total
FROM employee_profile     
WHERE id = user_id_in;

试试这个查询,这会对你很有帮助

SELECT SUM(
    CASE 
    WHEN first_name  = ''  THEN '1'
    WHEN last_name  = ''  THEN '1'
    WHEN country  = '' THEN '1'
    WHEN state  = '' THEN '1'
    ELSE '0'
  END) AS total
FROM employee_profile     
    WHERE id = user_id_in;

“有人能帮你找到正确的语法吗”-这取决于你想做什么,而你却忽略了提及…@MitchWheat:我想总结一下。问题是我无法让SP编译。示例:在这种情况下,我试图获得配置文件完成的汇总分数。因此,如果用户已完成这些DB字段,则其总分为5分。我希望澄清,谢谢。在
开始之前使用
分隔符$$
。。。如果我理解正确,您不需要使用
END
而使用
END$$
@Jacques,只需使用+即可获得分数总和。这种语法100%准确,但我怀疑它是否提供了有意义的信息。让我们看看@Jacques是否解释了他想做什么。@alvarog.Vicario从他在评论中的解释来看,这似乎是他想要的。所以他想要的毕竟是非空单元格的数量。。。奇怪的