尽管我进行了互联网搜索,但仍未找到解决我认为简单的SQL问题的方法。
我有一个简单的表格,
zip | location | transit
------------------------
10001 | 1 | 5
10001 | 2 | 2
此表中当然有大量的邮政编码,但是我想通过邮政编码进行简单的查询,而不是返回所有带有zip的行,而是仅返回一行(共3列),包含最低的运输价值。
我一直在使用聚合函数min(),但是没有正确使用它。
使用Postgres SQL DB 9.6
谢谢!
答案 0 :(得分:2)
将ORDER BY
与LIMIT
一起使用:
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
的所有引用更改为表的名称。