sql select记录两者中的最小值

时间:2019-01-27 21:01:47

标签: sql postgresql

尽管我进行了互联网搜索,但仍未找到解决我认为简单的SQL问题的方法。

我有一个简单的表格,

zip   | location | transit
------------------------
10001 |    1     |  5
10001 |    2     |  2

此表中当然有大量的邮政编码,但是我想通过邮政编码进行简单的查询,而不是返回所有带有zip的行,而是仅返回一行(共3列),包含最低的运输价值。

我一直在使用聚合函数min(),但是没有正确使用它。

使用Postgres SQL DB 9.6

谢谢!

4 个答案:

答案 0 :(得分:2)

ORDER BYLIMIT一起使用:

SELECT t.*
FROM mytable t
WHERE t.zipcode = ?
ORDER BY t.transit
LIMIT 1

答案 1 :(得分:1)

怎么样

select * from table where zip = ‘10001’ order by transit limit 1

答案 2 :(得分:0)

我会使用distinct on

select distinct on (zip) t.*
from t
order by zip, transit;

这通常是Postgres中最有效的方法,尤其是在(zip, transit)上使用索引。

当然,如果您只关心一个邮政编码,那么where / order by / limit也是完全合理的。

答案 3 :(得分:0)

假设您还想返回与最小location值关联的transit值,那么这里是使用inner join的一种可能的解决方案:

select t.*
from
    yourtable t inner join 
    (select u.zip, min(u.transit) as mt from yourtable u group by u.zip) v
    on t.zip = v.zip and t.transit = v.mt

将对yourtable的所有引用更改为表的名称。