Independent Company Challenges

Netflix-style SQL challenges

Independent Netflix-style streaming, subscription, catalog, ratings, and engagement SQL practice.

These independent exercises use Netflix-relevant business domains; they are not claimed to be questions used by Netflix, and this site is not affiliated with the company.

Exercises
25
Difficulty
Beginner to Hard

What this collection tests

Skills and query patterns

Streaming engagement, content performance, subscriptions, ratings, lifecycle segments, and recommendations

Curated exercises

Choose a challenge

Work in the live editor where supported. Advanced guided labs state their engine boundary before you open the workspace.

  1. Challenge 1Beginner

    User Directory

    Return all users showing user_id, country, and signup_date, ordered by user_id.

    • Date analysis
    • Sorting

    SQLite live

    Open challenge
  2. Challenge 2Beginner

    Premium Subscribers

    Return user_id, plan, and monthly_fee for every subscriber on the Premium plan, ordered by user_id.

    • Filtering
    • Sorting

    SQLite live

    Open challenge
  3. Challenge 3Beginner

    Content Catalog

    Return title and genre for all movies, ordered alphabetically by title.

    • Sorting

    SQLite live

    Open challenge
  4. Challenge 4Beginner

    India Signups

    Return user_id and signup_date for users in India (country = 'IN'), ordered by user_id.

    • Filtering
    • Sorting

    SQLite live

    Open challenge
  5. Challenge 5Beginner

    Crime Genre Titles

    Return the title of every movie in the Crime genre, ordered alphabetically.

    • Filtering
    • Sorting

    SQLite live

    Open challenge
  6. Challenge 6Easy

    Subscribers per Plan

    Return plan and the number of subscribers on each plan, ordered by subscriber_count descending.

    • Aggregation
    • Sorting

    SQLite live

    Open challenge
  7. Challenge 7Easy

    User Subscription Details

    Return user_id, country, plan, and monthly_fee for every user, ordered by user_id.

    • Joins
    • Sorting

    SQLite live

    Open challenge
  8. Challenge 8Easy

    Recent Content Releases

    Return title and release_year for movies released after 2016, ordered by release_year then title.

    • Filtering
    • Sorting

    SQLite live

    Open challenge
  9. Challenge 9Easy

    Total Watch Time per User

    Return user_id and total_minutes (sum of watch_minutes) for each user who has watched content, ordered by total_minutes descending.

    • Aggregation
    • Filtering
    • Sorting

    SQLite live

    Open challenge
  10. Challenge 10Easy

    Unique Viewers per Title

    Return movie_id and viewer_count (distinct users) for each movie, ordered by viewer_count descending then movie_id ascending.

    • Joins
    • Aggregation
    • Sorting

    SQLite live

    Open challenge
  11. Challenge 11Medium

    Average Rating per Title

    Return title and avg_rating (rounded to 2 decimal places) for each movie, ordered by avg_rating descending.

    • Joins
    • Aggregation
    • Numeric functions

    SQLite live

    Open challenge
  12. Challenge 12Medium

    Revenue by Plan

    Return plan and total_revenue (sum of monthly_fee) per plan, ordered by total_revenue descending.

    • Aggregation
    • Sorting

    SQLite live

    Open challenge
  13. Challenge 13Medium

    Watch Time by Country

    Return user_id, country, and total_minutes for each user who has watched content, ordered by total_minutes descending.

    • Joins
    • Aggregation
    • Sorting

    SQLite live

    Open challenge
  14. Challenge 14Medium

    Sci-Fi Viewers

    Return distinct user_id values for all users who have watched at least one Sci-Fi movie, ordered by user_id.

    • Joins
    • Filtering
    • Sorting

    SQLite live

    Open challenge
  15. Challenge 15Medium

    Movies per Genre

    Return genre and movie_count for each genre, ordered by movie_count descending then genre alphabetically.

    • Aggregation
    • Sorting

    SQLite live

    Open challenge
  16. Challenge 16Medium

    Subscribed but Never Watched

    Return user_id, country, and plan for subscribers who have no entries in watch_history, ordered by user_id.

    • Joins
    • Subqueries
    • Filtering

    SQLite live

    Open challenge
  17. Challenge 17Hard

    Above-Average Viewers

    Return user_id and total_minutes for users whose total watch time is above the average total watch time per user, ordered by total_minutes descending.

    • Joins
    • Subqueries
    • Aggregation

    SQLite live

    Open challenge
  18. Challenge 18Hard

    Content Performance Summary

    Return movie_id, title, genre, total_watch_minutes, and avg_rating for each movie that has both watch history and ratings, ordered by total_watch_minutes descending.

    • Joins
    • Subqueries
    • Aggregation

    SQLite live

    Open challenge
  19. Challenge 19Hard

    Top Country per Genre

    Return genre, country, and watch_count (number of sessions) for the top country in each genre, ordered by genre.

    • Window functions
    • Joins
    • Subqueries

    SQLite live

    Open challenge
  20. Challenge 20Hard

    Plan Revenue Summary

    Return plan, subscriber_count, revenue, and revenue_per_subscriber for each plan, ordered by revenue descending.

    • Subqueries
    • Aggregation
    • Numeric functions

    SQLite live

    Open challenge
  21. Challenge 21Hard

    Watch vs Rate Activity

    Return user_id, movies_watched, and movies_rated for every user who has watched content. Use 0 for users who watched but never rated.

    • Joins
    • Subqueries
    • Aggregation

    SQLite live

    Open challenge
  22. Challenge 22Hard

    Top Country by Revenue

    Return country, total_revenue, and subscriber_count for the single country with the highest total subscription revenue.

    • Window functions
    • Joins
    • Subqueries

    SQLite live

    Open challenge
  23. Challenge 23Hard

    User Engagement Tiers

    Return user_id, movies_watched, and engagement_tier ('Low', 'Medium', or 'High') for all watching users using NTILE(3) over movies watched. Order by movies_watched descending, then user_id ascending.

    • Window functions
    • Subqueries
    • Aggregation

    SQLite live

    Open challenge
  24. Challenge 24Hard

    Top Genre per Plan

    Return plan, top_genre, and watch_count for the most-watched genre within each subscription plan, ordered by plan.

    • Window functions
    • Joins
    • Subqueries

    SQLite live

    Open challenge
  25. Challenge 25Hard

    Monthly Signup Trend

    Return month (YYYY-MM), new_users signed up that month, and cumulative_users (running total) ordered by month ascending.

    • Window functions
    • Subqueries
    • Aggregation

    SQLite live

    Open challenge
01

Attempt

Write a query or design from the brief before opening any hints.

02

Validate

Run it against the included dataset and inspect the output.

03

Explain

Compare the verified answer and explain each choice aloud.

Learn before practicing Netflix

Strengthen your understanding with these targeted learning topics:

Continue practicing

SQL Interview Practice

Return to the complete interview preparation experience.