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;
请注意,上面在 ROW_NUMBER
中使用的 ORDER BY
子句是任意的,因为在列值的分区内,所有值都将具有相同的值。
我正在努力编写一个查询来获取列中值的累计非重复计数。
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;
请注意,上面在 ROW_NUMBER
中使用的 ORDER BY
子句是任意的,因为在列值的分区内,所有值都将具有相同的值。