SQL 中的累计计数

Cumulative Counting in SQL

我正在努力编写一个查询来获取列中值的累计非重复计数。

table column:           desired column:
a                       1
b                       1
c                       1
c                       2
c                       3
a                       2
a                       3

解释:

row 1 的值为 a,前面没有值为 a 的行,因此我们计算 a 一次并得到 1.

row 2 的值为 b,前面没有值为 b 的行,因此我们计算 b 一次并得到 1.

row 3 的值为 c,前面没有值为 c 的行,因此我们计算 c 一次并得到 1.

row 4 的值为 c,前一行的值为 c,所以我们计算 c 两次并得到 2.

row 5 的值为 c,前两行的值为 c 所以我们计算 c 三次并得到 3.

row 6 的值为 a,前面有 1 行的值为 a 所以我们计算 a 两次并得到 2.

row 7 的值为 a,前两行的值为 a 所以我们计算 a 三次并得到 3.

任何帮助都会很棒!

如果您的 SQL 版本支持它,那么 ROW_NUMBER 是这里的一个选项:

SELECT
    col,
    ROW_NUMBER() OVER (PARTITION BY col ORDER BY col) cn
FROM yourTable;

Demo

请注意,上面在 ROW_NUMBER 中使用的 ORDER BY 子句是任意的,因为在列值的分区内,所有值都将具有相同的值。