• 1158. 市场分析 I


    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              |
    +-----------+------------+----------------+
    1. # Write your MySQL query statement below
    2. select
    3. u.user_id buyer_id ,join_date,ifnull(s1.cod,0) orders_in_2019
    4. from
    5. Users u left join #左连接进行拼表 便于选出 查询每个用户的注册日期和在 2019 年作为买家的订单总数。
    6. (
    7. select
    8. count(order_id) cod,buyer_id # 日期和在 2019 年作为买家的订单总数 和 买家的id
    9. from
    10. Orders
    11. where
    12. date_format(Order_date,'%Y') = '2019' #选出只是2019年的日子
    13. group by
    14. buyer_id
    15. ) s1
    16. on
    17. u.user_id = s1.buyer_id

    用的 子查询:

    1. SELECT
    2. u.user_id AS buyer_id,
    3. u.join_date,
    4. ( SELECT count( * ) FROM Orders o WHERE u.user_id = o.buyer_id AND EXTRACT( YEAR FROM order_date ) = 2019 ) AS orders_in_2019
    5. FROM
    6. Users u

    左连接以后 再用 case when 进行筛选:

    1. # Write your MySQL query statement below
    2. select u.user_id as buyer_id, u.join_date,
    3. case when o.order_id is not null then count(*) else 0 end as orders_in_2019
    4. from users as u left outer join orders as o
    5. on u.user_id = o.buyer_id and year(o.order_date) = 2019
    6. group by u.user_id

  • 相关阅读:
    完全解析Array.apply(null, { length: 1000 })
    JTAG引脚定义的学习
    如何在Django中使用django-crontab启动定时任务、关闭任务以及关闭指定任务
    C++ 程序员入门需要多久,怎样才能学好?
    【每日一题】补档 CF1678B-Tokitsukaze and Good 01-String | 思维 | 简单
    图解LeetCode——剑指 Offer II 025. 链表中的两数相加(难度:中等)
    UE4 Ultradynamicsky进行地面交互
    从NLP视角看电视剧《狂飙》,会有什么发现?
    蓝桥杯国一,非ACMer选手保姆级经验分享
    NXP i.MX8系列平台开发讲解 - 1.1 导读前言
  • 原文地址:https://blog.csdn.net/m0_69157845/article/details/125420928