Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
postgresql中的Min函数_Sql_Postgresql_Group By_Min - Fatal编程技术网

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的
所做的(就像在原始查询中一样)。