是否可以使用 SQL 排名函数按以下顺序对数据进行排名

Is it possible to rank the data in following order using SQL ranking functions

我在 table 中有数据,需要按 Brand 列排序,并根据 ClassCode 更改进行排名。我尝试使用 ROW_NUMBER、RANK、DENSE_RANK 函数使用 PARTITION BY 但没有得到我需要的结果。

随着 ClassCode 的变化,等级应该增加,我不能为 ClassCode[ 使用 PARTITION BY =33=] 因为它改变了品牌的顺序。

示例table:

Code Brand    ClassCode
101  Sony     201
103  LG       202
104  Nokia    203
107  Sony     201
108  Samsung  202

Table 数据需要按 Brand 排序并按 ClassCode 排序,如下所示:

要求的结果:

Code Brand    ClassCode  rnk
103  LG       202        1
104  Nokia    203        2
108  Samsung  202        3
101  Sony     201        4
107  Sony     201        4

注意:获得顺序和排名后,我需要将结果插入另一个 table。我知道应该只在 SELECT 语句中完成排序,但不幸的是,应用程序从 table 中选择数据,该数据已填充了所有顺序和排名逻辑。

Table data needs to be ordered by Brand and ranked by ClassCode

排名和排序是两种不同的东西,它们不必依赖于同一组列。

您可以使用以下查询按 ClassCode 排名,并按 Brand 排序:

select 
    t.*,
    dense_rank() over(order by ClassCode) rnk
from mytable
order by Brand, Code

也就是说,要生成预期结果,您需要按 Brand(而不是 ClassCode)进行排名:

select 
    t.*,
    dense_rank() over(order by Brand) rnk
from mytable
order by Brand, Code

这是一个间隙和孤岛问题,您要在其中尝试根据 code 顺序查找 classcode 更改的次数。

这应该return你想要的结果:

select t.*,
       sum(case when prev_cc = classcode then 0 else 1 end) over (order by code) as ranking
from (select t.*, lag(classcode) over (order by code) as prev_cc
      from t
     ) t