← Meta Interview Insights

Meta·Data Scientist·Technical Phone Screen·Senior

Senior
May 2026

Summary

Meta DS interview with a SQL-heavy technical screen. Two questions, both involving the same schema, and the second one had enough moving parts that I had to slow down and think out loud more than I wanted to.

Questions Asked (2)

Q1

Given a schema with users, sessions, calls, and call_participants tables, write a query to return the distinct users who initiated at least one call (group or 1:1) within a specific 7-day window.

Product Analytics & MetricsData Modeling
Author's notes

Pretty straightforward join between calls and a date filter.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the schema and the definition of 'initiated' (e.g., initiator_id in calls table). Then write a query that filters calls by the 7-day window, joins to users to get distinct initiators, and handles both group and 1:1 calls uniformly.

Pro tip: Mention that you would check for data quality issues like null initiators or duplicate calls, and consider using a subquery or CTE for readability and performance.

1. Clarify requirements and schema

Confirm the definition of 'initiated' (e.g., initiator_id in calls table) and the exact 7-day window (inclusive/exclusive). Ensure you understand the relationships between users, calls, and call_participants.

2. Filter calls by time window

Use a WHERE clause on the calls table to select calls within the specified 7-day window, using appropriate date functions.

3. Identify initiators

Select the distinct initiator_id from the filtered calls. If the initiator is stored in call_participants (e.g., with a role flag), join accordingly.

4. Join to users for details

Join the distinct initiator_ids to the users table to return user details (e.g., user_id, name) as required.

5. Optimize and validate

Consider indexing on date and initiator_id, and validate results with edge cases (e.g., calls exactly at window boundaries).

Key Points to Mention

  • Definition of 'initiated' – typically initiator_id in calls table or a role in call_participants.
  • Handling both group and 1:1 calls – ensure the query doesn't exclude either type.
  • Time window filtering – use >= start_date AND < end_date or BETWEEN with caution.
  • Use of DISTINCT to avoid duplicate users if a user initiated multiple calls.
  • Potential need to join call_participants if initiator is not directly in calls.
  • Performance considerations: indexing, avoiding SELECT *, using CTEs for readability.

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q2

Using the same schema, compute the percentage of French daily active users who participated in at least one call on a specific date. Output the reference date, total French DAUs, the count who were on a call, and the percentage rounded to two decimals. Write it as a single SQL script using CTEs.

Product Analytics & MetricsData ModelingA/B Testing & Experimentation
Author's notes

This is where I slowed down.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the schema and definitions: identify the tables for users, daily activity, and calls, and confirm how to filter French users and define a 'call' on the given date. Then build CTEs to isolate the target date, compute the denominator (French DAUs), compute the numerator (French DAUs with at least one call), and finally calculate the percentage with proper rounding. Use LEFT JOIN or EXISTS to ensure users without calls are counted in the denominator but not the numerator.

Pro tip: Always handle NULLs and avoid double-counting by using DISTINCT or EXISTS; also explicitly state your assumptions about time zones and what constitutes a 'call' (e.g., answered vs. initiated) to show product sense.

1. Clarify schema and definitions

Identify the relevant tables (e.g., users, daily_activity, calls) and columns (user_id, date, country, call_id, call_status). Confirm the definition of 'French' (e.g., country = 'FR') and 'participated in a call' (e.g., call duration > 0 or status = 'completed').

2. Compute French DAUs (denominator)

Create a CTE that selects distinct user_ids from the daily activity table for the specific date, filtered to French users. This gives the total French DAUs.

3. Compute French DAUs with at least one call (numerator)

Create a CTE that selects distinct user_ids from the calls table for the specific date, filtered to French users. Ensure each user is counted once even if they made multiple calls.

4. Join and calculate percentage

Join the two CTEs on user_id (using LEFT JOIN from DAU to callers) to count how many DAUs had at least one call. Compute the percentage as (callers / total_daus) * 100, rounded to two decimals.

5. Output final result

Select the reference date, total French DAUs, count of French DAUs who were on a call, and the rounded percentage. Ensure the query returns a single row for the given date.

Key Points to Mention

  • Use of CTEs for readability and modularity
  • Definition of DAU: distinct users active on the given date
  • Handling of users with multiple calls: use DISTINCT or EXISTS to avoid double-counting
  • Filtering by country and date correctly, considering time zones if applicable
  • Rounding to two decimal places using ROUND(..., 2)
  • Assumptions about what constitutes a 'call' (e.g., call duration > 0, status = 'completed')

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.