如何用简单的公式创建查询?

时间:2015-09-02 19:21:24

标签: mysql sql

嘿,有没有办法用简单的公式创建查询? 我有一个表data,其中两列value_onevalue_two都是十进制值。我想选择此行,其中value_onevalue_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所以选定的行只是第一个和第二个。

2 个答案:

答案 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;