Medium之1159.市场分析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: Item
Column Name | Type |
---|---|
item_id | int |
item_brand | varchar |
此表主键是 item_id。
问题
请写出一条SQL语句以查询每个用户的注册日期和在 2019 年作为买家的订单总数。
示例
Users table:
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 table:
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 table:
item_id | item_brand |
---|---|
1 | Samsung |
2 | Lenovo |
3 | LG |
4 | HP |
Result table:
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 |
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/market-analysis-i
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答
select user_id as buyer_id,join_date,count(buyer_id) as orders_in_2019
from users u
left join
orders o on u.user_id = o.buyer_id and year(order_date)='2019'
group by u.user_id
注意
外连接时要注意where和on的区别:
1.on是在连接构造临时表时执行的,不管on中条件是否成立都会返回主表(也就是left join左边的表)的内容;
2.where是在临时表形成后执行筛选作用的,不满足条件的整行都会被过滤掉。
如果这里用的是 where year(order_date)=‘2019’ 那么得到的结果将会把不满足条件的user_id为3,4的行给删掉。用on的话会保留user_id为3,4的行。
还没有评论,来说两句吧...