Meta·Data Scientist·Technical Phone Screen
May 2026
SQL-heavy technical screen for a Data Scientist role at Meta. Five questions all off the same orders table schema, covering filtering, aggregation, bucketing, HAVING clauses, and set operators. Pretty focused session, no behavioral stuff at all.
- Given the orders table, return the order_id for all orders on 2025-09-01 that are paid and have an amount of at least 10. Use only a WHERE clause and list the resulting rows.
- For each user, compute their total paid amount across all dates and floor it to whole dollars. Return user_id and the floored total. Also explain why FLOOR(SUM(amount)) gives a different result than SUM(FLOOR(amount)).
- Add a value_tier column to orders using CASE WHEN: amounts under 10 are 'low', 10 to under 100 are 'mid', 100 and above are 'high'. For orders on 2025-09-01 only, return each tier and its count, ordered by tier.
- For each user, count their paid orders up to and including 2025-09-01. Return only users who have at least 2 such orders. Write the exact SQL and show the resulting rows.
- Using the orders table, build two subqueries: users who ordered on the web on 2025-09-01, and users who ordered in-store on the same date. Combine them with UNION and then with UNION ALL. Compare the row counts, explain which operator is more efficient and why, when you'd still use UNION despite the cost, and describe the double-counting risk when using UNION ALL to find unique users across channels.
“Straightforward filter question.” The rest of the author's notes on Data Scientist interview at Meta, Technical Phone Screen round, covers how they worked through the question, what the panel pushed back on, and what they would do differently.
View Post