目前,我正试图通过左联接字段对查询结果排序。
错误是:列"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的值是用户输入。
以下是相关表格及其关系的图片:
发布于 2018-07-14 13:57:06
您可以使用聚合函数,例如:
max(similarity(aliases."alias", quote_literal(:query)))
https://stackoverflow.com/questions/51343286
复制