PostgreSQL-通过左联接一对多字段对查询结果进行排序

时间:2018-07-14 20:51:51

标签: sql postgresql


我目前在尝试通过左连接字段对查询结果进行排序。

错误是:列“ 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 的值是用户输入。

以下是相关表及其关系的图像:

Tables and Relations

1 个答案:

答案 0 :(得分:0)

您可以使用聚合函数,例如:

        max(similarity(aliases."alias", quote_literal(:query)))