MySQL计算不在x和y之间的值之间的差异

标签 mysql

我有一个 mysql 查询(大致如下),它查找表以确定不属于推荐准则范围内的值;

SELECT 
    location.name, test.name, result.value
FROM
    results
        INNER JOIN
    location ON location.id = results.locationid
        INNER JOIN
    tests ON tests.id = results.testid
WHERE
    result.value NOT BETWEEN test.lowerlimit AND test.upperlimit
GROUP BY location.name

这会返回超出范围的测试,然后我计划计算推荐范围和我得到的结果之间的差异。我遇到的问题是,有时超出范围会低于范围,有时会高于范围,所以我不能这样做( result.value - test.upperlimit )。

有什么办法可以包含类似 IF 的内容吗?那里的语句,说明结果是否为 < lowerlimit然后计算results.value - test.lowerlimit ,或者如果是 > upperlimit然后计算results.value - test.upperlimit

最佳答案

看看 MySQL control flow functions

以下是使用 IF 函数的示例:

SELECT 
    location.name, 
    test.name, 
    IF (result.value < test.lowerlimit, results.value - test.lowerlimit, results.value - test.upperlimit)
FROM
    results
        INNER JOIN
    location ON location.id = results.locationid
        INNER JOIN
    tests ON tests.id = results.testid
WHERE
    result.value NOT BETWEEN test.lowerlimit AND test.upperlimit
GROUP BY location.name

您也可以在 SELECT 中使用 CASE 语句,如下所示:

CASE 
WHEN result.value < test.lowerlimit THEN 
    results.value - test.lowerlimit 
ELSE 
    results.value - test.upperlimit 
END

关于MySQL计算不在x和y之间的值之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48800194/

相关文章:

mysql - 是否可以在没有准备语句的情况下使用动态表名在一个查询中完成此操作?

php - 您用于将数据插入 mysql 数据库的代码

php获取字符之间的字符串

php - Mysql 循环遍历行来检查行,直到找到计数为零的行

php - MySQL 错误 "Too many connections"

mysql - 将字段复制到另一个字段,不同的行,其中 id = parentID

mysql - 用于计算开仓当前余额的 SQL 查询

asp.net - 为什么我要为 MS SQL 数据库而不是 MySQL 数据库支付虚拟主机费用?

php - Codeigniter:一张表中的多个 COUNT 和 SUM

mysql - Highcharts json 每日图表