首页 > 解决方案 > PostgreSQL MIN 和 MAX 函数不返回一个结果

问题描述

在 PostgreSql DB 中,我有一个名为Trip.

表中有一列称为id一列meta

id一行中的示例如下所示:

id = 123456

meta一行中的示例如下所示:

meta = {"runTime": 3922000, "distance": 85132, "duration": 4049000, "fuelUsed": 19.595927498516176}

我想从Trip表中选择具有最小 kph 的行程并显示行程 ID 和最小 kph。这是我的查询:

select tp."id" tripid, MIN((3600 * (tp."meta"->>'distance')::numeric)
   / ((tp."meta"->>'runTime')::NUMERIC)) minkph FROM "Trip" tp 
WHERE tp."createdAt" BETWEEN '2020-04-01 00:00:00+00'
                      and '2020-04-30 00:00:00+00'
GROUP BY tp."id"

但是,此查询返回所有行程的 id 和除法计算结果,而不仅仅是一行。

能否请你帮忙?

标签: postgresql

解决方案


您可以order by计算kph字段并仅返回第一个:

select tp."id" tripid, MIN((3600 * (tp."meta"->>'distance')::numeric)
   / ((tp."meta"->>'runTime')::NUMERIC)) minkph FROM "Trip" tp 
WHERE tp."createdAt" BETWEEN '2020-04-01 00:00:00+00'
                      and '2020-04-30 00:00:00+00'
GROUP BY tp."id"
order by 2
limit 1

推荐阅读