gpt4 book ai didi

mysql - 如何查询MySQL中每一行的序数索引

转载 作者:行者123 更新时间:2023-11-29 10:51:32 24 4
gpt4 key购买 nike

假设我有这张 table :

| Order ID |  User  |  Order Date |  
-----------------------------------
| 1 | Dave | 03/01/2017 |
| 2 | Jim | 03/09/2017 |
| 3 | John | 03/15/2017 |
| 4 | John | 03/18/2017 |
| 5 | Jim | 03/18/2017 |
| 6 | Dave | 03/30/2017 |
| 7 | John | 04/04/2017 |
| 8 | Jim | 04/16/2017 |

我想要的是再放一列来指示每个人的第n个订单,因为我需要分析用户的重复行为。所以输出应该是这样的:

| Order ID |  User  |  Order Date | n-th |
-----------------------------------------
| 1 | Dave | 03/01/2017 | 1 |
| 2 | Jim | 03/09/2017 | 1 |
| 3 | John | 03/15/2017 | 1 |
| 4 | John | 03/18/2017 | 2 |
| 5 | Jim | 03/18/2017 | 2 |
| 6 | Dave | 03/30/2017 | 2 |
| 7 | John | 04/04/2017 | 3 |
| 8 | Jim | 04/16/2017 | 3 |

这意味着:

  • 订单 #1 是 Dave 的第一个订单
  • 订单 #2 是 Jim 的第一个订单...
  • 订单 #5 是 Jim 的第二个订单

等等!
如何使用 SQL 中的原始查询获取此信息?
谢谢。

最佳答案

在大多数数据库中,您将使用row_number()。在 MySQL 中,最好使用变量来完成此操作:

select t.*,
(@rn := if(@u = user, @rn + 1,
if(@u := user, 1, 1)
)
) as nth
from t cross join
(select @u := '', @rn := 0) params
order by user, orderdate;

您还可以使用相关子查询来制定此查询,但使用变量的方法应该具有更好的性能。

要恢复数据的原始格式,请使用上面的子查询,然后按订单 ID 排序。

关于mysql - 如何查询MySQL中每一行的序数索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43653470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com