You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带条件表达式的分区排名:如何仅对2015-2016年利润计算RANK()

正确查询写法

你可以使用SQL窗口函数原生支持的FILTER子句实现需求,该子句会在计算排名前过滤仅保留2015、2016年的行参与计算,其余年份行的排名结果自动返回NULL,不需要在外层额外添加CASE语句做置空处理。

完整查询代码如下:

with SalesX as (
    select 'Office Supplies' Category , 2014 Year,22593.42 Profit UNION all
    select 'Technology', 2014, 21492.83 UNION all
    select 'Furniture', 2014,   5457.73 UNION all
    select 'Office Supplies',   2015,   25099.53  UNION all
    select 'Technology',    2015,   33503.87  UNION all
    select 'Furniture', 2015,   50000.00  UNION all
    select 'Office Supplies',   2016,   35061.23  UNION all
    select 'Technology',    2016,   39773.99  UNION all
    select 'Furniture', 2016,   6959.95
) select *,
rank() filter (where Year IN (2015, 2016)) over (order by profit desc) rank_in_2015_2016
 from SalesX order by rank_in_2015_2016;

该写法兼容PostgreSQL、SQLite 3.30+、BigQuery、Snowflake等绝大多数主流现代SQL数据库。


内容的提问来源于stack exchange,提问作者David542

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:45:00