嘿,有没有办法用简单的公式创建查询?
我有一个表data
,其中两列value_one
和value_two
都是十进制值。我想选择此行,其中value_one
和value_two
之间的差异大于5
。我怎么能这样做?
我可以这样做吗?
SELECT * FROM data WHERE (MAX(value_one, value_two) - MIN(value_one, value_two)) > 5
示例值
value_one, value_two
1,6
9,3
2,3
3,2
所以类比的差异是:5, 6, 1, 1
所以选定的行只是第一个和第二个。
答案 0 :(得分:3)
考虑一个例子,其中较小的数字用较大的数字减去:
2 - 5 = -3
因此,结果是带有否定符号的两个数字的差异。
现在,考虑相反的情况,当用较小的数字减去较大的数字时:
5 - 2 = 3
非常简单吧。
基本上,如果您忽略该符号,则两个数字的差异保持不变。换句话说,这称为数字的绝对值。
现在,问题是如何在MySQL中找到绝对值? 对此的回答是MySQL的内置方法,即abs()函数,它返回一个数字的绝对值。
ABS(X): 返回X的绝对值。
mysql> SELECT ABS(2);
-> 2
mysql> SELECT ABS(-32);
-> 32
因此,无需担心找到最小和最大数字,我们可以直接关注两个数字的差异,然后检索结果的绝对值。最后,检查它是否大于5.
因此,最终的查询变为:
SELECT *
FROM data
WHERE abs(value_one - value_two) > 5;
一旦计算出绝对值,您也可以执行复杂操作,例如添加或除以第三个值。检查以下代码:
SELECT *
FROM
data
WHERE
(abs(value_one - value_two) / value_three) + value_four > 5;
您还可以使用逻辑运算符(如AND,OR,NOT)添加多个条件。单击here以获取逻辑运算符。
SELECT *
FROM
data
WHERE
((abs(value_one - value_two) / value_three) + value_four > 5)
AND (value_five != 0);
以下是MySQL中可用的各种功能的链接: https://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html
答案 1 :(得分:1)
不,您只需使用简单的where
子句:
select *
from data
where abs(value_one - value_two) > 5;