SQL架构
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 | +-----------+------------+----------------+
- # Write your MySQL query statement below
- select
- u.user_id buyer_id ,join_date,ifnull(s1.cod,0) orders_in_2019
- from
- Users u left join #左连接进行拼表 便于选出 查询每个用户的注册日期和在 2019 年作为买家的订单总数。
- (
- select
- count(order_id) cod,buyer_id # 日期和在 2019 年作为买家的订单总数 和 买家的id
- from
- Orders
- where
- date_format(Order_date,'%Y') = '2019' #选出只是2019年的日子
- group by
- buyer_id
- ) s1
- on
- u.user_id = s1.buyer_id
用的 子查询:
- SELECT
- u.user_id AS buyer_id,
- u.join_date,
- ( SELECT count( * ) FROM Orders o WHERE u.user_id = o.buyer_id AND EXTRACT( YEAR FROM order_date ) = 2019 ) AS orders_in_2019
- FROM
- Users u
左连接以后 再用 case when 进行筛选:
- # Write your MySQL query statement below
- select u.user_id as buyer_id, u.join_date,
- case when o.order_id is not null then count(*) else 0 end as orders_in_2019
- from users as u left outer join orders as o
- on u.user_id = o.buyer_id and year(o.order_date) = 2019
- group by u.user_id