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

多字段分区并为每个分区组分配相同组编号的实现方法

问题描述

我有如下数据集:

CarTypeDateCar
Honda5/28/2022car1
Honda5/28/2022car1
Honda8/11/2022car2
Honda8/11/2022car2
BMW5/28/2022car1
BMW5/28/2022car1
BMW8/11/2022car2
BMW8/11/2022car2

希望生成一个名为Expected的列,结果如下:

CarTypeDateCarExpected
Honda5/28/2022car11
Honda5/28/2022car11
Honda8/11/2022car22
Honda8/11/2022car22
BMW5/28/2022car11
BMW5/28/2022car11
BMW8/11/2022car22
BMW8/11/2022car22

我尝试了以下查询,但未得到正确结果:

select CarType, Date, Car,ROW_NUMBER() OVER (PARTITION BY CarType, Car ORDER BY Date ASC) AS RW from table
解决方案

你的需求是同一CarType下,相同Car(对应相同Date)的行要得到相同的序号,而ROW_NUMBER()会给同一分组内的每行生成唯一序号,所以不适用。应该用RANK()或者DENSE_RANK(),同时调整分区和排序逻辑:

方法1:使用DENSE_RANK()

SELECT 
  CarType, 
  Date, 
  Car,
  DENSE_RANK() OVER (PARTITION BY CarType ORDER BY Date, Car) AS Expected
FROM your_table_name;

方法2:使用RANK()

SELECT 
  CarType, 
  Date, 
  Car,
  RANK() OVER (PARTITION BY CarType ORDER BY Date, Car) AS Expected
FROM your_table_name;

说明

  • 分区改为PARTITION BY CarType:按车型分组,在每个车型内部计算序号
  • 排序用ORDER BY Date, Car:确保同一Date和Car的行被归为同一组,获得相同的序号
  • DENSE_RANK()和RANK()在这里效果一致,因为同一分组内没有间隔的排名情况。如果后续有跳过的场景,DENSE_RANK()会连续编号,RANK()会跳过重复的序号位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:14:38