尝试使用输入几何按距离排序t(x)
,同时与 JOINed 表中的几何进行比较。
WITH "nearest_groups" as (
SELECT groups.id, ST_Distance(t.x, locations.center) AS nearest
FROM (SELECT ST_GeographyFromText('SRID=4326;POINT(-121.0611 39.2191)')
) AS t(x), groups
INNER JOIN locations ON groups.location_id = locations.id
WHERE ST_DWithin(t.x, locations.center, 300000)
)
SELECT *
FROM "groups"
INNER JOIN "nearest_groups" ON "groups"."id" = "nearest_groups"."id"
ORDER BY "nearest_groups"."nearest" asc
错误:列“nearest_groups.nearest”必须出现在 GROUP BY 子句中或用于聚合函数*
我不明白错误度量需要我做什么才能使这个查询工作。在那里扔一个 GROUP BY 有意义吗?我也不熟悉聚合函数。
(!!!)查询似乎在 PSQL 中运行良好,但在我们的 ORM 环境(bookshelfjs/Knex)中却不行。我觉得这令人震惊;ORM 给了我永远存在的恐惧,我将不得不与他们搏斗,让他们做我想做的事
更新:我们正在使用 GraphQL,一个常见的模式是获取可以通过添加hasMore
布尔值和total
计数来分页的项目。所以在其他地方,正在编译“hasMore”和“total”,并且正在抛出这个错误,因为它们正在使用聚合函数