postgresql中的Min函数
我试图找到一个人口密度最低的分区,因此我做了以下工作:postgresql中的Min函数,sql,postgresql,group-by,min,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 总面积乘以1000(以平方米为单位),再除以总人口。 我只需要一条记录来显示分区(edname)和计算的人口密度((MIN((P.total\u
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
总面积
乘以1000(以平方米为单位),再除以总人口。
我只需要一条记录来显示分区(edname
)和计算的人口密度((MIN((P.total\u area*1000)/P.total2011))
,而我得到的是所有记录,甚至没有排序
问题是,我必须按edname对其进行分组,如果我省略了按
分组,并且有
行,我会得到一个错误。非常感谢您的帮助 试试看
SELECT edname, (total_area*1000/total2011) density
FROM eds_census2011
WHERE (total_area*1000/total2011) = (SELECT MIN(total_area*1000/total2011) FROM eds_census2011)
“仅返回一行”规则可以通过使用LIMIT 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;
乘以1000(以平方米为单位)
。。真奇怪。你的基本单位是什么?面积31.623x31.623米?很难相信。@AndreiIvanov:这个查询忽略了HAVING count(*)>1
部分,并且不是等价的。嗯,关于确切的目标,这个问题相当模糊。@ErwinBrandstetter OP的目标只是找到最小的密度。如果这是他想要的,你的答案是正确的,但可能会简单得多,而且Q是误导性的。谢谢你的回答,但这并没有返回最小的密度。。。可能是因为它仍然是按edname分组的@安德烈伊瓦诺夫:我很确定它是这样的。精确地说:一个edname
至少有两行的密度最小。这就是拥有COUNT(*)1的所做的(就像在原始查询中一样)。