增量Row_Number只在哪里不同

时间:2017-06-13 00:52:58

标签: tsql

我有下表,我已经非常简单了,因为我不知道如何将其格式化为此处的表格(旁注如果有人可以将我链接到一个简单的教程,我会永远感谢)。

id
1
1
1
2
2
2

我想添加另一个列,该列仅在不同的ID上增加数量,因此结果应为

Id
1
1
1
2
2
2

rowNum 
1
1
1
2
2
2

目前我所能得到的只有:

id
1
1
1
2
2
2
rowNum
1
2
3
4
5
6

我在这里遗漏了一些非常简单的东西,因为我确信我应该能够使用row_number或rank和一个窗口函数来解决这个问题,但我无法理解。

2 个答案:

答案 0 :(得分:2)

使用DENSE_RANK()代替ROW_NUMBER()

SELECT
    id,
    DENSE_RANK() OVER (ORDER BY id) dr
FROM yourTable

Demo

答案 1 :(得分:1)

您也可以使用子查询自联接来执行此操作。

mysql> select id, 
> (select count(distinct id) 
>  from 
>  testtest b 
>  where b.id < a.id) 
> from testtest a;
+------+---------------------------------------------------------------+
| id   | (select count(distinct id) from testtest b where b.id < a.id) |
+------+---------------------------------------------------------------+
|    1 |                                                             0 |
|    1 |                                                             0 |
|    1 |                                                             0 |
|    2 |                                                             1 |
|    2 |                                                             1 |
|    2 |                                                             1 |
+------+---------------------------------------------------------------+
6 rows in set (0.01 sec)

还有一种方法:

select a.id, b.idRank
from testtest a,
   (
   select id, 
   rank() over 
      (order by id) as idRank
   from (
         select distinct id 
         from testtest
        ) testtest2
   ) b
where a.id = b.id