gpt4 book ai didi

sql - 为什么我们需要 `order by` in row_number() over(按列名排序)?

转载 作者:行者123 更新时间:2023-12-05 00:41:32 25 4
gpt4 key购买 nike

为什么我们应该在这个 t-sql 术语的 over 短语中使用“order by”:

row_number() over(order by column name)

最佳答案

如果您问为什么必须在 OVER CLAUSE 中放置 ORDER BY 子句(不仅仅是因为 ANSI 规范 需要它),您可能会认为这是多余的,因为它是除了将放置在整个 ORDER BY 子句之外的查询结束。

ORDER BYOVER() clause 中的用处是因为您可能希望将 ORDER BY 应用到整个查询,而不是在确定由分区 ROW_NUMBER() 生成的列时应用的排序功能。考虑以下查询,我们希望对城市 (PARTITION BY) 内的城市人口进行排名,但按国家名称和城市名称的字母顺序排列:

假设 City(CountryName, CityName, Population)

select CountryName, CityName, 
ROW_NUMBER() OVER (PARTITION BY CountryName
ORDER BY Population DESC) AS RankedPopulation
FROM City
ORDER BY CountryName, CityName;

可能会出现这样的结果:

CountryName     CityName       RankedPopulation
--------------- -------------- -----------------
England Liverpool 2
England London 1
France Lyons 2
France Paris 1
USA Los Angeles 2
USA Miami 3
USA New York 1

如果您有多个从分析函数投影的列,则每一个列都可以在各自的 OVER 子句中具有独立的顺序。

请注意,在我上面的示例中,RANK would be a more appropriate choice than ROW_NUMBER - 我只是想保留您问题的上下文。

SqlFiddle of the example here

关于sql - 为什么我们需要 `order by` in row_number() over(按列名排序)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29575960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com