我的数据如下:
Table Name = sales_orders
Customer_id| Order_id| Item_Id
-------------------------------
1 | 1 | 10
1 | 1 | 24
1 | 1 | 37
1 | 2 | 11
1 | 2 | 15
1 | 3 | 28
2 | 4 | 37
4 | 6 | 10
2 | 7 | 10
但是,我需要它看起来像这样:
Customer_id| Order_id| Item_Id |Order_rank
------------------------------------------
1 | 1 | 10 | 1
1 | 1 | 24 | 1
1 | 1 | 37 | 1
1 | 2 | 11 | 2
1 | 2 | 15 | 2
1 | 3 | 28 | 3
2 | 4 | 37 | 1
4 | 6 | 10 | 1
2 | 7 | 10 | 2
客户id是唯一的人
订单id是唯一的订单
item\u id是产品代码
为了进一步解释,前三行来自客户#1的第一个订单(order#u id=1),其中此人订购了3种不同的商品(10、24和37)。然后,他们用另外两种产品购买了另一个订单(订单号=2)。客户id=2的人有2个唯一订单(4和6),而id为“4”的客户有一个唯一订单(订单id=6)
基本上,我需要做的是根据客户id和订单id对这些订单进行排序,这样我就可以说“订单id=7是客户id=2的第二个订单,因为订单id=2”
这里的挑战是我不能在mysql查询中使用会话变量(例如@grp:=customer\u id)
例如,这样的查询是不允许的:
SELECT
customer_id,
order_id,
@ss := CASE WHEN @grp = customer_id THEN @ss + 1 ELSE 1 END AS
order_rank,
@grp := customer_id
FROM
(
SELECT
customer_id,
order_id
FROM sales_orders
GROUP BY customer_id, order_id
ORDER BY customer_id, order_id ASC
) AS t_1
CROSS JOIN (SELECT @ss := 0, @grp = NULL)ss
ORDER BY customer_id asc
谢谢你的帮助!
2条答案
按热度按时间wgmfuz8q1#
可以使用相关子查询:
或者在mysql 8+中:
sg3maiej2#
在相关子查询中,我们可以
Count(..)
独一无二的order_id
特定行的customer_id
以及order_id
确定军衔。我们需要计算唯一值,因为每个订单有多行(由于多个项目)。
查询
结果
db fiddle视图