From 8825fc7dced9087e7d554fe6549025d4522515a8 Mon Sep 17 00:00:00 2001 From: Feminto Date: Sun, 8 Jun 2025 16:17:16 -0700 Subject: [PATCH 1/2] Adding solution for the mock interview question --- Market Analysis II.sql | 60 ++++++++++++++++++++++++++++++++++++++++++ Tournament Winners.sql | 27 +++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 Market Analysis II.sql create mode 100644 Tournament Winners.sql diff --git a/Market Analysis II.sql b/Market Analysis II.sql new file mode 100644 index 0000000..12401bc --- /dev/null +++ b/Market Analysis II.sql @@ -0,0 +1,60 @@ +-- Method 1 +WITH cnt AS ( + SELECT seller_id, + COUNT(*) cnt + FROM orders + GROUP BY seller_id +), +main AS ( +SELECT user_id AS seller_id, + 2nd_item_fav_brand, + rwn +FROM ( + SELECT u.user_id, + -- o.order_date, + -- i.item_brand, + -- u.favorite_brand, + CASE + WHEN i.item_brand = u.favorite_brand AND c.cnt > 1 THEN 'yes' + ELSE 'no' + END AS 2nd_item_fav_brand, + ROW_NUMBER() OVER(PARTITION BY u.user_id ORDER BY o.order_date) AS rwn + FROM users u + LEFT JOIN orders o + ON o.seller_id = u.user_id + LEFT JOIN items i + ON o.item_id = i.item_id + LEFT JOIN cnt c + ON u.user_id = c.seller_id + ORDER BY u.user_id, o.order_date + ) a +WHERE rwn IN (1,2) +) +SELECT seller_id, + 2nd_item_fav_brand +FROM main +WHERE (seller_id, rwn) IN (SELECT seller_id, MAX(rwn) FROM main GROUP BY seller_id); + +-- Method 2 +WITH cte AS ( + SELECT order_date, + item_brand, + seller_id, + RANK() OVER(PARTITION BY o.seller_id ORDER BY o.order_date) AS 'rnk' + FROM orders o + JOIN items i + ON o.item_id = i.item_id +), +cte2 AS ( + SELECT * + FROM cte + WHERE rnk = 2 +) +SELECT user_id AS 'seller_id', + CASE + WHEN rnk = 2 AND item_brand = favorite_brand THEN 'yes' + ELSE 'no' + END AS '2nd_item_fav_brand' +FROM users +LEFT JOIN cte2 +ON cte2.seller_id = users.user_id; \ No newline at end of file diff --git a/Tournament Winners.sql b/Tournament Winners.sql new file mode 100644 index 0000000..bb3ed18 --- /dev/null +++ b/Tournament Winners.sql @@ -0,0 +1,27 @@ +WITH cte AS ( + SELECT player_id, + SUM(score) AS score + FROM ( + SELECT first_player AS player_id, + first_score AS score + FROM matches + UNION ALL + SELECT second_player AS player_id, + second_score AS score + FROM matches + ) a + GROUP BY player_id +) +SELECT group_id, + player_id +FROM ( + SELECT p.group_id, + c.player_id, + c.score, + ROW_NUMBER() OVER(PARTITION BY p.group_id ORDER BY c.score DESC, c.player_id) rwn + -- order by score desc first so that we consider the max scored player, and then sorting by player_id ascending so that we capture the lowest player_id in case of a tie. + FROM players p + JOIN cte c + ON p.player_id = c.player_id +) a +WHERE rwn = 1; \ No newline at end of file From f6b0ccf4754a3cc22745d7267a7e21df35e3c2d2 Mon Sep 17 00:00:00 2001 From: Feminto Date: Sun, 8 Jun 2025 16:19:57 -0700 Subject: [PATCH 2/2] Adding comments at the start of the query --- Market Analysis II.sql | 1 + Tournament Winners.sql | 1 + 2 files changed, 2 insertions(+) diff --git a/Market Analysis II.sql b/Market Analysis II.sql index 12401bc..245f881 100644 --- a/Market Analysis II.sql +++ b/Market Analysis II.sql @@ -1,3 +1,4 @@ +-- Solution for Mock SQL 3 question : Market Analysis II -- Method 1 WITH cnt AS ( SELECT seller_id, diff --git a/Tournament Winners.sql b/Tournament Winners.sql index bb3ed18..6870e34 100644 --- a/Tournament Winners.sql +++ b/Tournament Winners.sql @@ -1,3 +1,4 @@ +-- Soution for Mock SQL 3 question: Tournament Winners WITH cte AS ( SELECT player_id, SUM(score) AS score