1158. 市场分析 I

题目

Table: Users

Column Name Type
user_id int
join_date date
favorite_brand varchar

此表主键是 user_id。 表中描述了购物网站的用户信息,用户可以在此网站上进行商品买卖。

Table: Orders

Column Name Type
order_id int
order_date date
item_id int
buyer_id int
seller_id int

此表主键是 order_id。 外键是 item_id 和(buyer_id,seller_id)。

Table: Items

Column Name Type
item_id int
item_brand varchar

此表主键是 item_id。

请写出一条SQL语句以查询每个用户的注册日期和在 2019 年作为买家的订单总数。

以 任意顺序 返回结果表。

查询结果格式如下。

示例 1:

输入: Users 表:

user_id join_date favorite_brand
1 2018-01-01 Lenovo
2 2018-02-09 Samsung
3 2018-01-19 LG
4 2018-05-21 HP

Orders 表:

order_id order_date item_id buyer_id seller_id
1 2019-08-01 4 1 2
2 2018-08-02 2 1 3
3 2019-08-03 3 2 3
4 2018-08-04 1 4 2
5 2018-08-04 1 3 4
6 2019-08-05 2 2 4

Items 表:

item_id item_brand
1 Samsung
2 Lenovo
3 LG
4 HP

输出:

buyer_id join_date orders_in_2019
1 2018-01-01 1
2 2018-02-09 2
3 2018-01-19 0
4 2018-05-21 0

题解

SELECT `u`.`user_id` AS `buyer_id`, `u`.`join_date`, IFNULL(`t`.`cnt`, 0) AS `orders_in_2019`
FROM `Users` `u`
         LEFT JOIN (
    SELECT `o`.`buyer_id`, COUNT(1) AS `cnt`
    FROM `Orders` `o`
    WHERE `o`.`order_date` >= '2019-01-01'
      AND `o`.`order_date` <= '2019-12-31'
    GROUP BY `o`.`buyer_id`
) `t` ON `u`.`user_id` = `t`.`buyer_id`