1.题目基本信息
1.1.题目描述
表: Users
+----------------+---------+
| Column Name | Type |
+----------------+---------+
| user_id | int |
| join_date | date |
| favorite_brand | varchar |
+----------------+---------+
user_id 是此表主键(具有唯一值的列)。
表中描述了购物网站的用户信息,用户可以在此网站上进行商品买卖。
表: Orders
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| order_id | int |
| order_date | date |
| item_id | int |
| buyer_id | int |
| seller_id | int |
+---------------+---------+
order_id 是此表主键(具有唯一值的列)。
item_id 是 Items 表的外键(reference 列)。
(buyer_id,seller_id)是 User 表的外键。
表:Items
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| item_id | int |
| item_brand | varchar |
+---------------+---------+
item_id 是此表的主键(具有唯一值的列)。
编写解决方案找出每个用户的注册日期和在 2019 年作为买家的订单总数。
以 任意顺序 返回结果表。
1.2.题目地址
https://leetcode.cn/problems/market-analysis-i/description/
2.解题方法
2.1.解题思路
分组聚合+表连接
2.2.解题步骤
第一步,Orders表中根据order_date筛选出2019年的订单,然后根据buyer_id进行分组聚合,统计订单个数,记为T1
第二步,Users表和T1表进行左连接,返回结果
3.解题代码
sql代码
# Write your MySQL query statement below
# 第一步,Orders表中根据order_date筛选出2019年的订单,然后根据buyer_id进行分组聚合,统计订单个数,记为T1
WITH T1 AS (
SELECT
buyer_id AS user_id,
COUNT(1) AS cnt
FROM Orders
WHERE YEAR(order_date) = 2019
GROUP BY buyer_id
)
# 第二步,Users表和T1表进行左连接,返回结果
SELECT
user_id AS buyer_id,
join_date,
IFNULL(cnt, 0) AS orders_in_2019
FROM Users LEFT JOIN T1 USING(user_id)
4.执行结果










