【问题标题】:Re-number A list of values Based on their Grouping根据分组重新编号值列表
【发布时间】:2020-03-04 20:13:12
【问题描述】:

我有以下项目存储在一个表中:

List # | Sublist # | Sublist Priority
List A | Sublist 1 | 1
List A | Sublist 2 | 3
List B | Sublist 3 | 4
List B | Sublist 4 | 2
...
List X | Sublist 1 | 75
List X | Sublist 2 | 83

我想创建一个附加列,该列将根据子列表所在的列表重新计算子列表优先级。我希望查询查看每个单独的列表,找到优先级的 MIN 值,然后为该子列表分配一个新的“1”的优先级。然后在该列表中找到下一个子列表,并为其分配优先级“2”,依此类推,直到该列表中的所有子列表都被赋予新的升序优先级

List # | Sublist # | Sublist Priority | New Sublist Priority 
List A | Sublist 1 | 1                | 1
List A | Sublist 2 | 3                | 2
List B | Sublist 3 | 4                | 1
List B | Sublist 4 | 2                | 2
....
List X | Sublist 1 | 75               | 1
List X | Sublist 2 | 83               | 2

【问题讨论】:

  • 您使用的是哪种 DBMS 产品? “SQL”只是一种查询语言,而不是特定数据库产品的名称。 Why should I tag my DBMS
  • 我不明白“列表 B”的新优先级。

标签: sql select case


【解决方案1】:

你在描述:

select t.*,
       row_number() over (partition by list order by sublist_priority) as new_sublist_priority
from t;

这不适用于列表“B”,但这似乎与您的解释不符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2013-06-06
    • 1970-01-01
    相关资源
    最近更新 更多