drop table Users
drop table Orders
drop table Items
create table Users (user_id int, join_date date, favorite_brand varchar(20))
create table Orders (order_id int, order_date date, item_id int, buyer_id int, seller_id int)
create table Items (item_id int, item_brand varchar(20))
insert into Users (user_id, join_date, favorite_brand) values ('1', '2018-01-01', 'Lenovo')
insert into Users (user_id, join_date, favorite_brand) values ('2', '2018-02-09', 'Samsung')
insert into Users (user_id, join_date, favorite_brand) values ('3', '2018-01-19', 'LG')
insert into Users (user_id, join_date, favorite_brand) values ('4', '2018-05-21', 'HP')
insert into Orders (order_id, order_date, item_id, buyer_id, seller_id) values ('1', '2019-08-01', '4', '1', '2')
insert into Orders (order_id, order_date, item_id, buyer_id, seller_id) values ('2', '2018-08-02', '2', '1', '3')
insert into Orders (order_id, order_date, item_id, buyer_id, seller_id) values ('3', '2019-08-03', '3', '2', '3')
insert into Orders (order_id, order_date, item_id, buyer_id, seller_id) values ('4', '2018-08-04', '1', '4', '2')
insert into Orders (order_id, order_date, item_id, buyer_id, seller_id) values ('5', '2018-08-04', '1', '3', '4')
insert into Orders (order_id, order_date, item_id, buyer_id, seller_id) values ('6', '2019-08-05', '2', '2', '4')
insert into Items (item_id, item_brand) values ('1', 'Samsung')
insert into Items (item_id, item_brand) values ('2', 'Lenovo')
insert into Items (item_id, item_brand) values ('3', 'LG')
insert into Items (item_id, item_brand) values ('4', 'HP')
select * from Users
select * from Orders
select * from Items
1158. Market Analysis I
Write an SQL query to find for each user, the join date and the number of orders they made as a buyer in 2019.
CTE:
with cte as
(
select buyer_id,count(order_id) as orders_in_2019
from Orders
where order_date between '2019-01-01' and '2019-12-31'
group by buyer_id
) select user_id,join_date,isnull(c.orders_in_2019,0) as orders_in_2019
from Users u left join cte c
on u.user_id=c.buyer_id
General:
select u.user_id,u.join_date,
isnull(count(o.order_id),0) as orders_in_2019
from Users u
left join Orders o
on u.user_id = o.buyer_id
and YEAR(o.order_date)='2019'
group by u.user_id
1159. Market Analysis II
CTE
with cte1 as(
select seller_id,item_id,
rank() over(partition by seller_id order by order_date) as second_item
from Orders
),cte2 as (
select c1.seller_id,i.item_brand
from Items i join cte1 c1 on i.item_id=c1.item_id
where c1.second_item=2
) select u.user_id as seller_id,
case when u.favorite_brand = c2.item_brand then 'yes'
else 'no'
end as '2nd_item_fav_brand'
from Users u left join cte2 c2 on u.user_id=c2.seller_id
order by c2.seller_id
来源:CSDN
作者:chelseajcole
链接:https://blog.csdn.net/chelseajcole/article/details/104726746