mysql开关大小写

标签 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;

Murdoch 想出了一个解决这个问题的巧妙方法,我只需要对其进行一个更改,将每个值放入相应的变量

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; 

最佳答案

您可以通过为每个分数做一个案例并返回 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

关于mysql开关大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5282637/

相关文章:

mysql - 通过 Spring Boot 应用程序连接到远程数据库

mysql - 带 SUM 的 CASE 语句

php - MYSQL 和 PHP 循环并从联合表中只抓取一个项目?

Mysql用join计算时间

php - 检查值是否介于两列的值之间

sql - 如何强制 MERGE 语句与 DELETE 使用索引查找?

c# - 在C#中保存信息时出错

mysql - 修改查询以使用新表代替静态数字范围

c# - 在 C# 中切换在运行时确定的值

pattern-matching - Elixir 案例语句和模式匹配