Tsql 仅在不同的位置增加行数

Tsql 仅在不同的位置增加行数,tsql,Tsql,我有下面的表格,我把它做得很简单,因为我不知道如何在这里将它格式化为表格(请注意,如果有人能将我链接到一个简单的教程,我将永远感激) 我想添加另一列,它只在不同的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 我在这里遗漏了一些非常简单的东西,因为我相信我应该能够使用行数或秩和窗口函数来解决这个问题,但我无法解决它。您也可以使用子查询自连接来解决

我有下面的表格,我把它做得很简单,因为我不知道如何在这里将它格式化为表格(请注意,如果有人能将我链接到一个简单的教程,我将永远感激)

我想添加另一列,它只在不同的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

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

您也可以使用子查询自连接来解决这个问题

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)

您也可以通过子查询自连接来实现这一点

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)
使用
densite\u RANK()
代替
行号()

使用
densite\u RANK()
代替
行数()


就是这样!在这种情况下,这不会被认为是一个窗口函数,对吗?我只是想知道,所以我以后会直接了解我的术语。
densite\u RANK()
实际上是一个窗口函数。任何时候你看到
的时候,你都应该阅读“窗口函数”。看看行数和密集等级的比较。就是这样!在这种情况下,这不会被认为是一个窗口函数,对吗?我只是想知道,所以我以后会直接了解我的术语。
densite\u RANK()
实际上是一个窗口函数。任何时候当你看到<代码>超过
时,你都应该阅读“窗口函数”。看看行数和密集等级的比较。你的第一个查询是窗口函数的很好的替代品,在它们可能不可用的情况下(例如MySQL)+1你的第一个查询是窗口函数的很好替代品,在可能不可用的情况下(例如MySQL)+1
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
SELECT
    id,
    DENSE_RANK() OVER (ORDER BY id) dr
FROM yourTable