1158. 市场分析 I

该博客介绍了如何使用SQL查询从Users和Orders表中获取每个用户的注册日期,并统计他们在2019年作为买家的订单总数。提供了三种不同的SQL查询语句实现这一目标,包括子查询、左连接和CASE WHEN语句。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值