From 8fa3ec7e748f12e3bbd1e214f47a0eb803f5de9d Mon Sep 17 00:00:00 2001 From: ankitabmungalpara Date: Sun, 12 Jan 2025 00:47:14 +0530 Subject: [PATCH 1/2] Create tournament-winners.sql --- tournament-winners.sql | 101 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 tournament-winners.sql diff --git a/tournament-winners.sql b/tournament-winners.sql new file mode 100644 index 0000000..c64fa01 --- /dev/null +++ b/tournament-winners.sql @@ -0,0 +1,101 @@ +""" + +Table: Players ++-------------+-------+ +| Column Name | Type | ++-------------+-------+ +| player_id | int | +| group_id | int | ++-------------+-------+ +player_id is the primary key (column with unique values) of this table. +Each row of this table indicates the group of each player. + +Table: Matches ++---------------+---------+ +| Column Name | Type | ++---------------+---------+ +| match_id | int | +| first_player | int | +| second_player | int | +| first_score | int | +| second_score | int | ++---------------+---------+ +match_id is the primary key (column with unique values) of this table. +Each row is a record of a match, first_player and second_player contain the player_id of each match. +first_score and second_score contain the number of points of the first_player and second_player respectively. +You may assume that, in each match, players belong to the same group. + +The winner in each group is the player who scored the maximum total points within the group. In the case of a tie, the lowest player_id wins. + +Write a solution to find the winner in each group. + +Return the result table in any order. + +The result format is in the following example. + +Input: +Players table: ++-----------+------------+ +| player_id | group_id | ++-----------+------------+ +| 15 | 1 | +| 25 | 1 | +| 30 | 1 | +| 45 | 1 | +| 10 | 2 | +| 35 | 2 | +| 50 | 2 | +| 20 | 3 | +| 40 | 3 | ++-----------+------------+ +Matches table: ++------------+--------------+---------------+-------------+--------------+ +| match_id | first_player | second_player | first_score | second_score | ++------------+--------------+---------------+-------------+--------------+ +| 1 | 15 | 45 | 3 | 0 | +| 2 | 30 | 25 | 1 | 2 | +| 3 | 30 | 15 | 2 | 0 | +| 4 | 40 | 20 | 5 | 2 | +| 5 | 35 | 50 | 1 | 1 | ++------------+--------------+---------------+-------------+--------------+ +Output: ++-----------+------------+ +| group_id | player_id | ++-----------+------------+ +| 1 | 15 | +| 2 | 35 | +| 3 | 40 | ++-----------+------------+ + +""" + +with cte as( + select + first_player as player, + first_score as score + from + Matches + union all + select + second_player as player, + second_score as score + from + Matches +), +cte2 as( + select + player, + sum(score) as total + from + cte + group by + player +) + +select + distinct group_id, + first_value(c.player) over(partition by group_id order by total desc, p.player_id) as player_id +from + cte2 as c join players p +on + c.player = p.player_id From fef0fd3595ade20698d2468b4fa6adae3696155f Mon Sep 17 00:00:00 2001 From: ankitabmungalpara Date: Sun, 12 Jan 2025 00:49:51 +0530 Subject: [PATCH 2/2] Create market-analysis-ii.sql --- market-analysis-ii.sql | 113 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 market-analysis-ii.sql diff --git a/market-analysis-ii.sql b/market-analysis-ii.sql new file mode 100644 index 0000000..32c247e --- /dev/null +++ b/market-analysis-ii.sql @@ -0,0 +1,113 @@ +""" + +Table: Users ++----------------+---------+ +| Column Name | Type | ++----------------+---------+ +| user_id | int | +| join_date | date | +| favorite_brand | varchar | ++----------------+---------+ +user_id is the primary key (column with unique values) of this table. +This table has the info of the users of an online shopping website where users can sell and buy items. + +Table: Orders ++---------------+---------+ +| Column Name | Type | ++---------------+---------+ +| order_id | int | +| order_date | date | +| item_id | int | +| buyer_id | int | +| seller_id | int | ++---------------+---------+ +order_id is the primary key (column with unique values) of this table. +item_id is a foreign key (reference column) to the Items table. +buyer_id and seller_id are foreign keys to the Users table. + +Table: Items ++---------------+---------+ +| Column Name | Type | ++---------------+---------+ +| item_id | int | +| item_brand | varchar | ++---------------+---------+ +item_id is the primary key (column with unique values) of this table. + + +Write a solution to find for each user whether the brand of the second item (by date) they sold is their favorite brand. +If a user sold less than two items, report the answer for that user as no. It is guaranteed that no seller sells more than one item in a day. + +Return the result table in any order. + +The result format is in the following example. + +Input: +Users table: ++---------+------------+----------------+ +| user_id | join_date | favorite_brand | ++---------+------------+----------------+ +| 1 | 2019-01-01 | Lenovo | +| 2 | 2019-02-09 | Samsung | +| 3 | 2019-01-19 | LG | +| 4 | 2019-05-21 | HP | ++---------+------------+----------------+ +Orders table: ++----------+------------+---------+----------+-----------+ +| order_id | order_date | item_id | buyer_id | seller_id | ++----------+------------+---------+----------+-----------+ +| 1 | 2019-08-01 | 4 | 1 | 2 | +| 2 | 2019-08-02 | 2 | 1 | 3 | +| 3 | 2019-08-03 | 3 | 2 | 3 | +| 4 | 2019-08-04 | 1 | 4 | 2 | +| 5 | 2019-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 | ++---------+------------+ +Output: ++-----------+--------------------+ +| seller_id | 2nd_item_fav_brand | ++-----------+--------------------+ +| 1 | no | +| 2 | yes | +| 3 | yes | +| 4 | no | ++-----------+--------------------+ + +""" + +with cte as( + select + *, + rank() over(partition by seller_id order by order_date) as rnk + from + orders +), +cte2 as ( + select + seller_id, i.item_id, rnk, i.item_brand + from + cte c join items i + on + c.item_id = i.item_id + where + rnk = 2 +) +select + u.user_id as seller_id, +case + when favorite_brand = item_brand then "yes" + else "no" + end as 2nd_item_fav_brand +from + users u left join cte2 c +on + u.user_id = c.seller_id