我知道我可以通过这样做从mysql算起来:
Select customer, Count (customer) Numbers from TblOrders group by customer
我想计算每个客户在Order表中出现的次数。 之后,我想更新订单表,方法是将客户的客户ID与订户数最多的客户ID交换为另一位客户,ID = 1。
Customer | Numbers
1 | 5
2 | 18
3 | 0
所以这里最高的是C2,所以在执行另一次计数之后它现在将C1与C2交换,我应该得到下面的表格。
Customer | Numbers
1 | 18
2 | 5
3 | 0
我也知道交换可以通过我已完成的一些研究来完成。
Update TblOrders Set Customer = Case when 1 then 2
when 2 then 1
end
where TblOrders in (1, 2)
这句话的问题在于它假设我已经知道我交换的两个ID。但是如果我不知道,但我希望第二个是订单数量最多的ID ...我该怎么做呢?
答案 0 :(得分:1)
您希望发出UPDATE
请求,该请求会影响属于所讨论的两个客户之一的所有行。所以基本的想法是:
UPDATE TblOrders
SET customer = IF(customer == 'C1', @MaxCust, 'C1')
WHERE customer IN ('C1', @MaxCust)
如果您的客户ID是整数,则可以将其缩写为
UPDATE TblOrders
SET customer = 1 + @MaxCust - customer
WHERE customer IN (1, @MaxCust)
这是有效的,因为a + b - a = b
和a + b - b = a
,因此a
和b
会被交换。
我的上述注释是使用用户变量@MaxCust
来存储要交换的客户的ID。根据您的环境,您还可以使用应用程序代码在查询中输入正确的值。使用用户变量,您可以这样设置:
SELECT customer
FROM TblOrders GROUP BY customer
ORDER BY COUNT(*) DESC
LIMIT 1
INTO @MaxCust
答案 1 :(得分:0)
SELECT customer FROM TblOrders GROUP BY customer ORDER BY COUNT(*) DESC LIMIT 1 INTO @MaxCust;
Update TblOrders Set Customer = Case
when 1 then @MaxCust
when @MaxCust then 1
end
where TblOrders in (1, @MaxCust );