mysql - 如何编写查询选择合理的权衡?

标签 mysql sql select

在一个表中,我有两列 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 继续增加。有没有办法得到一组数据对 一次查询而不诉诸程序?

最佳答案

要通过 abd 获得最低的 obs,方法如下:

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

但在我看来,权衡规则有点特别。您应该尝试找出您能想到的最佳规则,并将它们摆在桌面上,以便我们能够实现您想要做的事情。

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

相关文章:

php - 数组数据发送并保存到表中,但显示错误消息

过程不显示的 mysql out 参数

Mysql2::Error: # MySQL 客户端未连接 — Rails 6.0.2.2 with rspec; Ruby 2.6.4 mac os Catalina + Mojave

sql - HiveQL 中 select 语句中 ?+.+ 的作用

mysql - 如何进行这个嵌套选择查询?

mysql - 创建一个查询以获取每个用户的最后 5 行

php - 从我的数据库查询音频文件到 PHP

sql - MySQL - 查找引用指定索引的条目

sql - array_length() 函数的第二个参数是什么?

php - Select id_value from db into array 复选框并将多个值从数组复选框插入到一列,并以逗号分隔