mysql切换案例

vol*_*ing 4 mysql sql case-statement

我有一个像下面的查询结构,我想知道是否有办法将选择查询写为一个使用CASE语句或通过其他方式,以便值根据其值插入适当的变量.

DECLARE passes INT;
DECLARE fails INT;
..

SELECT count(score)
INTO passes
  FROM scores
 WHERE score >= 40;

SELECT count(score)
INTO fails
  FROM scores
 WHERE score < 40;
Run Code Online (Sandbox Code Playgroud)

默多克想出了一个解决这个问题的简洁方法,我只需对其进行一次修改就可以将每个值放入各自的变量中

SELECT * 
INTO   passes, fails 
FROM  (SELECT SUM(CASE 
                    WHEN score >= 40 THEN 1 
                    ELSE 0 
                  END) AS _passes, 
              SUM(CASE 
                    WHEN score < 40 THEN 1 
                    ELSE 0 
                  END) AS _fails 
       FROM   scores) AS x; 
Run Code Online (Sandbox Code Playgroud)

3ur*_*och 9

你可以通过为每个得分做一个案例并返回1或0来做到这一点.然后将整个事物包装在SUM(不是COUNT)中,实际上为每个匹配案例的实例添加一个.

SELECT 
SUM(CASE WHEN score >= 40 THEN 1 ELSE 0 END) AS passes, 
SUM(CASE WHEN score < 40 THEN 1 ELSE 0 END) AS fails 
FROM scores
Run Code Online (Sandbox Code Playgroud)