Knowledge Guide
HomeDatabasesSQL Practice Problems

Page Recommendations

Problem

Table: Friendship

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| user1_id      | int     |
| user2_id      | int     |
+---------------+---------+
(user1_id, user2_id) is the primary key (combination of columns with unique values) for this table.
Each row of this table indicates that there is a friendship relation between user1_id and user2_id.

Table: Likes

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| user_id     | int     |
| page_id     | int     |
+-------------+---------+
(user_id, page_id) is the primary key (combination of columns with unique values) for this table.
Each row of this table indicates that user_id likes page_id.

Problem Definition

Write a solution to recommend pages to the user with user_id = 1 using the pages that his/her friends liked. It should not recommend pages user_1 already liked.

Return result table in any order without duplicates.

Example

Image
Image

Output

Image
Image

Try It Yourself

java
-- TODO: Write your user queries here

Solution

To recommend pages to the user with user_id = 1 based on the pages liked by their friends, while excluding the pages that user 1 has already liked, we can follow a systematic approach. This solution leverages SQL's WITH clause (Common Table Expressions), UNION ALL, and subqueries to efficiently identify the relevant pages for recommendation.

SQL Query

WITH friends AS ( (SELECT user2_id AS friend FROM Friendship WHERE user1_id = 1) UNION ALL (SELECT user1_id AS friend FROM Friendship WHERE user2_id = 1) ) SELECT DISTINCT page_id AS recommended_page FROM Likes WHERE user_id IN (SELECT friend FROM friends) AND page_id NOT IN ( SELECT page_id FROM Likes WHERE user_id = 1 );

Step-by-Step Approach

Step 1: Identify All Friends of User 1

Retrieve all user IDs that are friends with user 1 by checking both user1_id and user2_id in the Friendship table.

SQL Query:

WITH friends AS ( (SELECT user2_id AS friend FROM Friendship WHERE user1_id = 1) UNION ALL (SELECT user1_id AS friend FROM Friendship WHERE user2_id = 1) )

Explanation:

Output After Step 1:

+---------+ | friend | +---------+ | 2 | | 3 | | 4 | | 6 | +---------+

Step 2: Find Pages Liked by These Friends

Retrieve all page_ids that have been liked by the identified friends.

SQL Query:

SELECT DISTINCT page_id AS recommended_page FROM Likes WHERE user_id IN (SELECT friend FROM friends)

Explanation:

Output After Step 2:

+-----------------+ | recommended_page| +-----------------+ | 23 | | 24 | | 56 | | 33 | | 77 | | 88 | +-----------------+

Step 3: Exclude Pages Already Liked by User 1

Ensure that the recommended pages do not include any pages that user 1 has already liked.

SQL Query:

AND page_id NOT IN ( SELECT page_id FROM Likes WHERE user_id = 1 )

Explanation:

Output After Step 3:

+-----------------+ | recommended_page| +-----------------+ | 23 | | 24 | | 56 | | 33 | | 77 | +-----------------+

Step 4: Select Distinct Recommended Pages

Ensure that each recommended page appears only once in the final output, removing any duplicates that may arise from multiple friends liking the same page.

SQL Query:

SELECT DISTINCT page_id AS recommended_page FROM Likes WHERE user_id IN (...);

Explanation:

Final Output:

+-----------------+ | recommended_page| +-----------------+ | 23 | | 24 | | 56 | | 33 | | 77 | +-----------------+
🤖 Don't fully get this? Learn it with Claude

Stuck on Page Recommendations? Open Claude, copy a block below, and it'll teach you this exact concept — visually and interactively.

🎨 Explain it visually

Build the mental picture, not memorization.

I just read a lesson on **Page Recommendations** (Databases) and want to truly understand it. Explain Page Recommendations from first principles using ONE vivid real-world analogy and a visual mental model — draw it as ASCII art or a clear step-by-step diagram — with a concrete example using real numbers. Then ask me one question to check I got the mental picture, and wait for my reply. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🤔 Walk me through it (interactive)

Socratic — adapts to where you're stuck.

Teach me **Page Recommendations** interactively. Ask me ONE guiding question at a time, wait for my answer, and adapt to my confusion — build the idea with me step by step instead of explaining it all at once. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🧪 Quiz me & fix my gaps

Active recall exposes what you missed.

Quiz me on **Page Recommendations** with 5 questions, easy to tricky, ONE at a time. Tell me if each answer is right; at the end, explain clearly what I got wrong and why. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🧠 Make it stick

Intuition + hook + flashcards for long-term memory.

Help me remember **Page Recommendations** for the long term: give the one-sentence intuition, a memorable hook/mnemonic, a tiny worked example, and 3 active-recall flashcards (Q -> A). If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.

📝 My notes