The Problem I Was Trying to Solve
You know the drill. You have a data science or analytics interview coming up, and you need to brush up on SQL. So you head to StrataScratch or LeetCode, only to hit a paywall after 3 questions. Or worse, you need to create yet another account just to write SELECT * FROM users.
I got tired of it. So I built something different.
Introducing: SQLForge
A completely free, browser-based SQL practice platform with 103 real interview questions from companies like:
🔵 Meta — 8 questions
🔴 Google — 8 questions
🟦 Microsoft — 8 questions
🟠 Amazon — 8 questions
🍎 Apple — 7 questions
☁️ Salesforce — 7 questions
🔴 Netflix — 7 questions
⚫ Uber — 7 questions
🟢 Spotify — 7 questions
🏠 Airbnb — 7 questions
🔴 DoorDash — 8 questions
...and more
Here’s the kicker: There’s no backend. The entire SQLite database runs in your browser using WebAssembly. Your queries never leave your machine.
What Makes This Different?
✅ Zero Friction
No sign-up. No credit card. No “upgrade to premium for window functions.” You open the URL and you’re writing SQL in 3 seconds.
✅ Real SQL Execution
This isn’t some pattern-matcher that checks if your query looks vaguely correct. It’s an actual SQLite database with 17 tables of realistic sample data:
employees (30 rows with a full org hierarchy)
customers (25 customers with subscription tiers)
orders & order_items (50+ orders with line items)
user_sessions, streams, content (engagement data)
rides, deliveries, drivers (for Uber/DoorDash questions)
listings, bookings (for Airbnb questions)
And 6 more...
Write your query. Hit Run. See real results.
✅ Instant Solution Validation
Click Submit and your results get compared against the expected solution. You’ll know immediately:
✅ Correct! — Your query returns the right data
❌ Wrong number of columns — Expected 3, got 4
❌ Data mismatch — Row 2, Column 3: Expected “Engineering”, got “Sales”
No more staring at two outputs trying to spot the difference.
✅ The Topics That Actually Come Up in Interviews
This isn’t a random grab-bag of SQL trivia. The questions focus on what interviewers actually ask:
TopicWhat You’ll PracticeWindow FunctionsROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD, NTILE, PERCENT_RANKCTEsCommon Table Expressions for breaking down complex logicComplex JOINsSelf-joins, multi-table joins, handling NULLsAggregationsGROUP BY, HAVING, conditional aggregates with CASESubqueriesCorrelated and non-correlatedDate ManipulationExtracting months, calculating differences
The UI Details I’m Proud Of
I spent way too much time on the design. Here’s what you get:
🌙 Dark Theme Throughout
Inspired by GitHub’s dark mode. Easy on the eyes for those 3-hour practice sessions.
🏷️ Company Filter Pills
One click to see only Google questions. Or Amazon. Or DoorDash. Filter by the companies you’re interviewing with.
📊 Split-Panel Practice View
Left panel: Problem description, hints, schema reference
Right panel: CodeMirror-powered SQL editor with syntax highlighting + results table
⌨️ Keyboard Shortcuts
Ctrl/Cmd + Enter runs your query. Because clicking buttons is for people who aren’t in a flow state.
🎯 Visual Feedback
Correct answers get a satisfying green checkmark with a “Next Problem” button. Wrong answers show exactly what went wrong.
Sample Question: From Meta
Here’s a real question from the platform:
> Active Users Percentage
> Calculate the percentage of users who logged in during the last 7 days. Show the percentage rounded to 2 decimal places.
> Tables: user_sessions
If you’re stuck, there’s a Show Hint button:
> Hint: Use COUNT with CASE or subqueries to calculate percentages
Still stuck? Show Solution reveals:
SELECT
ROUND(
COUNT(DISTINCT CASE
WHEN session_date >= ‘2024-02-01’
THEN customer_id
END) * 100.0 / COUNT(DISTINCT customer_id), 2
) as active_percentage
FROM user_sessions;
The Playground Mode
Sometimes you just want to explore the data without a specific question. The Playground gives you:
Full schema reference in a collapsible sidebar
Quick query buttons (SELECT * FROM employees, etc.)
The same SQL editor with syntax highlighting
Results displayed in a clean table format
Think of it as your SQL sandbox.
Technical Details (For the Curious)
Stack:
React 18 + TypeScript
Vite for blazing-fast dev server
SQL.js (SQLite compiled to WebAssembly)
CodeMirror 6 for the editor
Zero runtime backend dependencies
How does SQLite run in the browser?
SQL.js takes the entire SQLite C library and compiles it to WebAssembly. When you load the app, it downloads a ~600KB WASM file, initializes an in-memory database, and loads all the sample data. Every query you write runs against this local database — nothing is sent to any server.
Performance?
Queries return in under 100ms, even for complex window functions across 50+ rows. The WebAssembly execution is shockingly fast.
Get Started
The app is live and free. No sign-up required.
Run locally:
git clone [repo]
cd sql-practice-app
npm install
npm run dev
What’s Next?
I’m considering adding:
[ ] Progress tracking (localStorage-based, still no accounts)
[ ] More questions (150+ is the target)
[ ] Timed challenge mode
[ ] Question difficulty calibration based on user submissions
[ ] Export your solutions as a PDF study guide
Let me know in the comments what features you’d find most useful.
Final Thoughts
SQL interviews shouldn’t require a subscription. Window functions aren’t premium content. And your queries shouldn’t be sent to some server just so you can practice.
103 questions. 14 companies. Zero friction.
Happy querying! 🎉
P.S. — If you’re preparing for a data interview and found this useful, share it with someone else who’s grinding LeetCode right now. They’ll thank you.
🔗 Links
GitHub: https://github.com/swagata15/SQL-Forge
Tags: #SQL #DataScience #TechInterviews #FAANG #CodingPractice


