我试图找到人口密度最低的师,我这样做了:
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 BY
和HAVING
行,则会收到错误消息。任何帮助都很受欢迎!
答案 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;