【发布时间】:2021-12-20 15:57:57
【问题描述】:
我有两个表:订单,商店。
商店:
shop_id | name
-----------------------
20 | PizzaShop
34 | SushiShop
订单:
orders_id | creation_time | user_id | shop_id | Status
------------------------------------------------------------------
1 | 2021-01-01 14:00:00 | 1 | 20 | OK
2 | 2021-02-01 14:00:00 | 1 | 34 | Cancelled
3 | 2021-03-01 14:00:00 | 1 | 20 | OK
4 | 2021-04-01 14:00:00 | 1 | 34 | OK
5 | 2021-05-01 14:00:00 | 2 | 20 | OK
6 | 2021-06-01 14:00:00 | 2 | 20 | OK
7 | 2021-07-01 14:00:00 | 2 | 34 | OK
8 | 2021-08-01 14:00:00 | 2 | 34 | OK
我需要找到每个用户的“最喜欢”的店铺,知道最喜欢的是有更多“OK”订单的店铺,并且如果有两个店铺的订单数量相同 ,然后选择具有最新订单的那个。
结果应该是这样的:
user_id | total_number_OK_orders | favourite_shop_name
------------------------------------------------------------------
1 | 3 | PizzaShop
2 | 4 | SushiShop
我不知道如何做第二列。首先,这是我目前拥有的:
SELECT
orders.user_id,
SUM(if(orders.Status = 'OK', 1, 0)) AS total_number_OK_orders
FROM orders
LEFT JOIN shops
ON orders.shop_id = shops.shop_id
GROUP BY orders.user_id;
【问题讨论】:
-
你的MySql是什么版本的?
-
你已经问过这个问题了。
-
@Shadow 我不知道这个问题的要求之前是否已经回答过,但可以肯定的是,您提出的重复链接不能提供完整的解决方案。
-
@forpas 我不同意,重复的问题是关于获得每组的最大计数,这正是这个问题的意义所在。 OP 设法获得了简单的条件计数,因此不需要单独的答案。
-
@Shadow 问题不是如何找到每个用户最喜欢的商店。这将使它成为许多问题的重复。问题是如何在同一个查询中组合两个不同的结果,其中之一是如何找到每个用户最喜欢的商店。如果其中 1 个(或两个)结果都已解决,这并不意味着它们的组合也已解决。
标签: mysql group-by sum left-join window-functions