Meh*_*ost 1 sql sql-server row-number sql-order-by
为什么我们应该在这个t-sql术语中使用"order by"替换短语:
row_number() over(order by column name)
Run Code Online (Sandbox Code Playgroud)
如果你问为什么必须将ORDER BY
子句放在OVER CLAUSE
(除了因为ANSI spec
需要它)之外,你可能认为这是多余的,因为除了ORDER BY
将放在查询末尾的整个子句之外.
的用处ORDER BY
中OVER()
条款是因为你可能希望应用不同的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;
Run Code Online (Sandbox Code Playgroud)
这可能会产生如下结果:
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
Run Code Online (Sandbox Code Playgroud)
如果您从分析函数中投影了多个列,则每个列都可以在相应的OVER
子句中具有独立的排序.
在我上面的例子中注意,RANK
将是一个更合适的选择ROW_NUMBER
- 我只想保留你的问题的上下文.