0

我有一个工作表,其中每个工作都有一些指标,如成本、所用时间等。我想为一组工作选择信息,如请求者和工作操作,除了该行数据,选择一些高级指标(最低成本、最高成本、最短时间等)。

数据经常变化,所以我想在一次选择中获取这些信息。是否有可能做到这一点?我不确定这在概念上是否可行,因为数据库必须返回行级数据以及聚合数据。

现在我可以获得所有细节并计算最小值/最大值,如下所示:

select requestor, action, cost, time_taken from job;

但是我必须编写代码来找到最小/最大值,当我真的只对最小值/最大值感兴趣时,这个查询必须下载所有成本/时间数据。我真的很想做类似的事情

select (min(cost), max(cost), min(time_taken), max(time_taken)), (requestor, action) from job;

并先获取聚合数据,再获取行级数据。这可能吗?(在真正的服务器上,这是在 MySQL 上,但对于开发人员,我在本地使用 sqlite,所以如果它也在那里工作会很好,但不是必需的)。

该表如下所示:

+----+-----------+--------+------+------------+
| id | requestor | action | cost | time_taken |
+----+-----------+--------+------+------------+
| 1  |     31233 | sync   |    8 |      423.3 |
+----+-----------+--------+------+------------+
| 2  |     11229 | read   |    1 |        1.3 |
+----+-----------+--------+------+------------+
| 3  |      1434 | edit   |    5 |      152.8 |
+----+-----------+--------+------+------------+
| 4  |    101781 | sync   |   12 |      712.1 |
+----+-----------+--------+------+------------+

我想找回统计数据:

最小/最大成本:1/12

min/max time_taken: 1.3/712.1

以及所有请求者和操作:

+-----------+--------+
| requestor | action |
+-----------+--------+
|     31233 | sync   |
+-----------+--------+
|     11229 | read   |
+-----------+--------+
|      1434 | edit   |
+-----------+--------+
|    101781 | sync   |
+-----------+--------+
4

1 回答 1

1

你只是想要聚合吗?

select requestor, action, min(cost), max(cost), min(time_taken), max(time_taken),
from job
group by requestor, action;
于 2019-09-09T17:49:05.837 回答