生成行号并将相同的行号赋给相同的值

ktecyv1j  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(307)

我有一个要求,显示重复的行号重复值为每一个新出现。
样品表 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

但我想要的是,对于每个新出现的行,必须按预期输出中所示的顺序打印行号。

g9icjywg

g9icjywg1#

你想要类似的东西吗 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 .

相关问题