持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第30天,点击查看活动详情
leetcode刷题1158-市场分析1
前文
本文内容为leetcode数据库类型题目,主要考查对于查询相关知识的掌握。本文解题方案为个人理解,并非最佳解决方案。该题目序号为1158,题目链接为leetcode.cn/problems/ma…
题目信息
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 年作为买家的订单总数。
题目分析
根据题目所给的信息,我们有三张表,分别是订单表、用户表以及订单项目表,本题目与订单项目表无关联,因此忽略即可。我们需要查询出每个用户的注册日期以及他们在2019年购买的订单总数。很容易联想到两表关联,但是有一点必须要注意,用户可能存在但其在2019年并没有进行购买行为,这种情况依然需要将用户显示在查询的结果中,且用户在2019年的订单数目显示为0。因此我们在进行两表关联时,需要将用户表作为主表,采用用户表left join订单表的方式进行数据表的关联。另外我们想要聚合每个用户在2019年实际购买的订单数,则需要我们针对用户id进行分组处理。这里注意要采用用户表的字段而不是订单表的字段,因为订单表的字段可能为空。至此,本题目解答完毕。
解题答案
select b.user_id as buyer_id,b.join_date,count(a.buyer_id) as orders_in_2019
from Users b
left join Orders a
on a.buyer_id = b.user_id
and a.order_date >= '2019-01-01' and a.order_date <= '2019-12-31'
group by
b.user_id,b.join_date
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。