在一个表中,我有两列obs和abd。我有兴趣找到
obs和abd的值都很低,但是abd的值越低
对obs来说比低值更重要。在现实世界里我有一个
低obs和低abd之间的权衡,这是不容易定义的
从数学上讲很难解释,但关键是
我想从查询中看到的是一些
合理的权衡。我想知道
obs值的范围。例如:

mysql> select obs, abd from flow where obs < 2000 order by abd,obs limit 10;

    +------+--------------+
    | obs  | abd          |
    +------+--------------+
    | 1372 | 0.0000004744 |
    | 1734 | 0.0000017704 |
    | 1010 | 0.0000017716 |
    | 1999 | 0.0000017716 |
    | 1637 | 0.0000036486 |
    |  383 | 0.0000066084 |
    |  745 | 0.0000066084 |
    | 1107 | 0.0000066084 |
    | 1469 | 0.0000066084 |
    | 1831 | 0.0000066084 |
    +------+--------------+

从上面的结果可以看出,有几个值
具有相同abd值的obs。我只对一个感兴趣
每个abd值的obs值最低其他的
应丢弃重复的abd值。这很容易做到
使用group by子句:
mysql> select obs, abd from flow where obs < 2000 group by abd order by abd,obs limit 10;

    +------+--------------+
    | obs  | abd          |
    +------+--------------+
    | 1372 | 0.0000004744 |
    | 1734 | 0.0000017704 |
    | 1010 | 0.0000017716 |
    | 1637 | 0.0000036486 |
    |  383 | 0.0000066084 |
    |  648 | 0.0000066096 |
    | 1540 | 0.0000097586 |
    | 1928 | 0.0000109544 |
    | 1566 | 0.0000119724 |
    |  913 | 0.0000119736 |
    +------+--------------+

到目前为止,还不错。现在的问题是在看过第一个
obs为1372,abd为0.0000004744的条目我不感兴趣
看到第二个条目obs和abd都更高。我是
有兴趣看到第三个条目,其中obs较低,但abd是
更高,因为obs和abd之间存在权衡。再说一次,我是
不想看到第四个条目,因为它有obs的值
和abd都比第三个显示的要高
进入。第五个条目是我特别感兴趣的,因为
虽然abd值稍高,obs值却低得多。
至于其余的条目,我不想看到,因为
他们的obs和abd都比已经看到的要高。
总之,我想要一个查询,它将显示:
+------+--------------+
| obs  | abd          |
+------+--------------+
| 1372 | 0.0000004744 |
| 1010 | 0.0000017716 |
|  383 | 0.0000066084 |
+------+--------------+

加上其他七个项目,其中obs继续下降,abd
继续增加。有没有办法得到一组数据对
只使用一个查询而不使用过程?

最佳答案

要通过obs获得最低的abd,请执行以下操作:

select min(obs), abd
from flow
where obs < 2000
group by abd
order by abd

但在我看来,取舍规则似乎有点临时性。你应该试着找出你能想到的最好的规则,然后把它们放在桌子上,这样我们就能实现你所要做的。

关于mysql - 如何编写选择合理取舍的查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5682552/

10-11 04:03