我有一个 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/