mysql选择当前位置的计数器[重复]

Posted

技术标签:

【中文标题】mysql选择当前位置的计数器[重复]【英文标题】:mysql select counter of current position [duplicate] 【发布时间】:2020-10-05 08:49:12 【问题描述】:

有这样一张桌子

+--------+------------+
| orderID | productID |
+--------+------------+
|    100 |         10 |
|    100 |         11 |
|    101 |         10 |
|    101 |         11 |
|    101 |         12 |
+--------+------------+

我需要添加第三列,即产品当前位置的计数器。 喜欢:

+--------+------------+--------------+
| orderID | productID | currentIndex | 
+--------+------------+--------------+
|    100 |         10 |      1       |
|    100 |         11 |      2       |
|    101 |         10 |      1       |
|    101 |         11 |      2       |
|    101 |         12 |      3       |
+--------+------------+--------------+

可以帮帮我吗?

我现在有这个查询:

SELECT orderID, productID
FROM orders;

【问题讨论】:

【参考方案1】:

如果您运行的是 mysql 8.0,`row_number() 会完全按照您的要求执行:

select orderid, productid, 
    row_number() over(partition by orderid order by productid) currentindex
from orders;

在早期版本中,备选方案是用户变量或相关子查询。我将推荐第二个选项 - 用户变量使用起来相当棘手,现在正式计划在未来弃用:

select orderid, productid, 
    (select count(*) from orders o1 where o1.orderid = o.orderid and o1.productid <= o.productid) currentindex
from orders o;

【讨论】:

以上是关于mysql选择当前位置的计数器[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用mysql设计一个全局订单生产计数器

mysql 计数器 计算不重复

Mysql如何以10分钟间隔选择计数聚合结果

使用php pdo选择原始计数不起作用[重复]

MySQL - 为每个重复值获取一个计数器

使用 php、pdo 和 mysql 显示当前登录用户的简单计数器