postgresql中的Min函数

时间:2013-05-09 23:38:14

标签: sql postgresql group-by min

我试图找到人口密度最低的师,我这样做了:

SELECT P.edname, MIN((P.total_area*1000)/P.total2011) AS "Lowest population density"
FROM eds_census2011 P
GROUP BY P.edname
HAVING COUNT (*)> 1

total_area乘以1000(因此以平方米计)并除以总人口。 我只想显示一个显示分区的记录(edname),并计算人口密度(MIN((P.total_area*1000)/P.total2011)),而是获得所有记录 - 甚至没有排序......

问题是我必须按照edname对其进行分组,如果我遗漏了GROUP BYHAVING行,则会收到错误消息。任何帮助都很受欢迎!

2 个答案:

答案 0 :(得分:1)

尝试

SELECT edname, (total_area*1000/total2011) density
  FROM eds_census2011
 WHERE (total_area*1000/total2011) = (SELECT MIN(total_area*1000/total2011) FROM eds_census2011)

<强> SQLFiddle

如果真的有必要,可以使用LIMIT 1轻松强制执行“仅返回一行”规则

答案 1 :(得分:1)

没有子查询:

SELECT p.edname, min((p.total_area * 1000)/p.total2011) AS lowest_pop
FROM   eds_census2011 p
GROUP  BY p.edname
HAVING COUNT (*) > 1
ORDER  BY 2
LIMIT  1;

这个只返回1行(如果有资格),即使多行的密度相同也很低。

如果您只想要最低密度的周期,这可以更加简单:

SELECT edname, (total_area * 1000)/total2011) AS lowest_pop
FROM   eds_census2011
ORDER  BY 2
LIMIT  1;