我目前在尝试通过左连接字段对查询结果进行排序。
错误是:列“ aliases.alias”必须出现在GROUP BY子句中或在聚合函数中使用。。
现在,我可以通过以下方式在组中添加字段来解决该错误:“ aliases.alias” ,但是这样做会重复查询每个系列具有的别名的结果。
>我正在尝试找到一种在不重复结果的情况下按语句在订单中使用 aliases.alias 的方法。
搜索SQL:
SELECT
series.id as series.id,
series."name",
series."overview",
series."firstAired",
CAST(CASE WHEN posters."seriesId" IS NULL THEN false ELSE true END AS BOOLEAN) AS poster,
FROM series
LEFT JOIN "posters" ON posters."seriesId" = series.id
LEFT JOIN "aliases" ON aliases."seriesId" = series.id
WHERE (series.document @@to_tsquery(:query))
OR (aliases.document @@to_tsquery(:query))
GROUP BY series.id, posters."seriesId"
ORDER BY
GREATEST(
ts_rank(series.document, to_tsquery(:query), 8),
MAX(ts_rank(aliases.document, to_tsquery(:query), 8)),
similarity(series."name", quote_literal(:query)),
similarity(aliases."alias", quote_literal(:query))
)
DESC
NULLS LAST;
:query 的值是用户输入。
以下是相关表及其关系的图像:
答案 0 :(得分:0)
您可以使用聚合函数,例如:
max(similarity(aliases."alias", quote_literal(:query)))