正确使用 LATERAL FROM
Correct use of a LATERAL FROM
我正在尝试使用 PostGIS 在 SQL 语句中执行多个步骤,基本上将栅格转换为点、缓冲、溶解,然后确定整体边界,即基于属性的凹包。
以下是我所在的位置,但收到提示使用 LATERAL FROM 的错误,但我不知道我需要做什么。
如有任何帮助,我们将不胜感激。
[0A000] ERROR: aggregate function calls cannot contain set-returning function calls Hint: You might be able to move the set-returning function into a LATERAL FROM item. Position: 123
SELECT name,
st_union(
st_buffer(
st_transform(
(ST_PixelAsCentroids(rast, 1)).geom
, 32756),
50, 2)
)
FROM rasters
where id < 5
只需将函数 ST_PixelAsCentroids()
移动到 CROSS JOIN LATERAL
并给它一个标签,例如
SELECT name, ST_ASTEXT(
ST_Union(
ST_Buffer(
ST_Transform((j).geom,32756),
50, 2))
)
FROM rasters
CROSS JOIN LATERAL ST_PixelAsCentroids(rast, 1) j
WHERE id < 5
GROUP BY name;
尽管您可以在没有 CROSS JOIN LATERAL
的情况下获得相同的结果
SELECT name, ST_ASTEXT(
ST_Union(
ST_Buffer(
ST_Transform((j).geom,32756),
50, 2))
)
FROM rasters, ST_PixelAsCentroids(rast, 1) j
WHERE id < 5
GROUP BY name;
我正在尝试使用 PostGIS 在 SQL 语句中执行多个步骤,基本上将栅格转换为点、缓冲、溶解,然后确定整体边界,即基于属性的凹包。
以下是我所在的位置,但收到提示使用 LATERAL FROM 的错误,但我不知道我需要做什么。
如有任何帮助,我们将不胜感激。
[0A000] ERROR: aggregate function calls cannot contain set-returning function calls Hint: You might be able to move the set-returning function into a LATERAL FROM item. Position: 123
SELECT name,
st_union(
st_buffer(
st_transform(
(ST_PixelAsCentroids(rast, 1)).geom
, 32756),
50, 2)
)
FROM rasters
where id < 5
只需将函数 ST_PixelAsCentroids()
移动到 CROSS JOIN LATERAL
并给它一个标签,例如
SELECT name, ST_ASTEXT(
ST_Union(
ST_Buffer(
ST_Transform((j).geom,32756),
50, 2))
)
FROM rasters
CROSS JOIN LATERAL ST_PixelAsCentroids(rast, 1) j
WHERE id < 5
GROUP BY name;
尽管您可以在没有 CROSS JOIN LATERAL
SELECT name, ST_ASTEXT(
ST_Union(
ST_Buffer(
ST_Transform((j).geom,32756),
50, 2))
)
FROM rasters, ST_PixelAsCentroids(rast, 1) j
WHERE id < 5
GROUP BY name;