Medium之1159.市场分析I

川长思鸟来 2023-01-23 08:53 207阅读 0赞

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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答

  1. select user_id as buyer_id,join_date,count(buyer_id) as orders_in_2019
  2. from users u
  3. left join
  4. orders o on u.user_id = o.buyer_id and year(order_date)='2019'
  5. 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的行。

发表评论

表情:
评论列表 (有 0 条评论,207人围观)

还没有评论,来说两句吧...

相关阅读

    相关 教育2B市场分析

    针对高校市场,目前三分天下,支付宝,微信,其他(南北和华东),支付宝是土豪用钱砸,微信是场景生态,开放连接,其他是传统的厂商,有独立APP 1、2B的市场不一定要盈利,首先要