我正在尝试使用ST_SnapToGrid,然后GROUP BY
使用网格单元(x,y)。这是我首先做的:
SELECT
COUNT(*) AS n,
ST_X(ST_SnapToGrid(geom, 50)) AS x,
ST_Y(ST_SnapToGrid(geom, 50)) AS y
FROM points
GROUP BY x, y
我不想ST_SnapToGrid
为x
和重新计算y
。所以我将其更改为使用子查询:
SELECT
COUNT(*) AS n,
ST_X(geom) AS x,
ST_Y(geom) AS y
FROM (
SELECT
ST_SnapToGrid(geom, 50) AS geom
FROM points
) AS tmp
GROUP BY x, y
但是当我运行时EXPLAIN
,这两个查询都有完全相同的执行计划:
GroupAggregate (...)
-> Sort (...)
Sort Key: (st_x(st_snaptogrid(points.geom, 0::double precision))), (st_y(st_snaptogrid(points.geom, 0::double precision)))
-> Seq Scan on points (...)
问题:PostgreSQL 会重用 的结果值ST_SnapToGrid()
吗?
如果没有,有没有办法让它做到这一点?