0

我有一个需要PARTITION BY与 2 个字段一起使用的查询。我这样做是这样的:

SELECT
    ROW_NUMBER()
    OVER (PARTITION BY
            id, country_id
        ORDER BY
            id, country_id) AS row_number
    FROM
        cities
    ...

问题是,country_id中使用的第二个聚合字段PARTITION BY,可以NULL,我需要ROW_NUMBER()总结一下。

row_number()只有在结果集中有相同id 的记录时才进行总结。如果有记录与and或相同and is country_id,我希望对其进行总结。idcountry_ididcountry_idNULL

有没有办法这样做?

4

3 回答 3

2

您可以使用合并,如下所示:

SELECT
    ROW_NUMBER()
    OVER (PARTITION BY
            id, Coalesce(country_id,0)) AS row_number
    FROM
        cities
    ...
于 2018-07-11T19:00:17.903 回答
1

尝试替换空

SELECT
ROW_NUMBER()
OVER (PARTITION BY
        id, ISNULL(country_id,-1)
    ORDER BY
        id, ISNULL(country_id,-1)) AS row_number
FROM
    cities
...
于 2018-07-11T19:00:29.117 回答
1

如果其中一个值是 ,则没有区别NULL。另一方面,按相同的列排序是没有用的。在 Postgres 中,这order by是可选的,所以你可以这样做:

row_number() over (partition by id, country_id)
于 2018-07-11T18:59:01.793 回答