生成行号并将相同的行号分配给相同的值
Generate row numbers and assign same row number to same values
我需要为每个新出现的重复值显示重复的行号。
示例 Table orders
列 AGENT_CODE
我希望预期输出类似于
Sl agent_code
------------------
1 A001
2 A002
2 A002
2 A002
2 A002
2 A002
2 A002
2 A002
3 A003
3 A003
4 A004
4 A004
4 A004
4 A004
5 A007
5 A007
5 A007
6 A008
6 A008
通过编写查询,我能够获得序列号为 1,2,3,4....19 的行号:
SET @row_number := 0;
SELECT @row_number := @row_number + 1 AS row_number, AGENT_CODE
FROM orders, (SELECT @row_number := 0) t
ORDER BY agent_code
但我想要的是行号必须按预期输出中所示的每次新出现的顺序打印。
您想要类似于 DENSE_RANK() OVER (ORDER BY AGENT_CODE)
的内容,需要 MySQL 8+。在旧版本中,您可以简单地这样做:
SELECT AGENT_CODE, (
SELECT COUNT(DISTINCT AGENT_CODE) + 1
FROM orders AS x
WHERE x.AGENT_CODE < t.AGENT_CODE
) AS sn
FROM orders AS t
PS:如果你想使用用户变量,那么你需要另一个名为 @prevagent
.
的变量
我需要为每个新出现的重复值显示重复的行号。
示例 Table orders
列 AGENT_CODE
我希望预期输出类似于
Sl agent_code
------------------
1 A001
2 A002
2 A002
2 A002
2 A002
2 A002
2 A002
2 A002
3 A003
3 A003
4 A004
4 A004
4 A004
4 A004
5 A007
5 A007
5 A007
6 A008
6 A008
通过编写查询,我能够获得序列号为 1,2,3,4....19 的行号:
SET @row_number := 0;
SELECT @row_number := @row_number + 1 AS row_number, AGENT_CODE
FROM orders, (SELECT @row_number := 0) t
ORDER BY agent_code
但我想要的是行号必须按预期输出中所示的每次新出现的顺序打印。
您想要类似于 DENSE_RANK() OVER (ORDER BY AGENT_CODE)
的内容,需要 MySQL 8+。在旧版本中,您可以简单地这样做:
SELECT AGENT_CODE, (
SELECT COUNT(DISTINCT AGENT_CODE) + 1
FROM orders AS x
WHERE x.AGENT_CODE < t.AGENT_CODE
) AS sn
FROM orders AS t
PS:如果你想使用用户变量,那么你需要另一个名为 @prevagent
.