0

我试图找到一个人口密度最低的部门,所以我做了以下事情:

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行,我会收到错误消息。非常感谢任何帮助!

4

2 回答 2

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;
于 2013-05-10T00:30:24.437 回答
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如果确实有必要,可以使用“仅返回一行”规则来轻松执行

于 2013-05-09T23:56:26.240 回答