Tsql 仅在不同的位置增加行数
我有下面的表格,我把它做得很简单,因为我不知道如何在这里将它格式化为表格(请注意,如果有人能将我链接到一个简单的教程,我将永远感激) 我想添加另一列,它只在不同的ID上增加数字,因此结果应该是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
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