Reviewed by Aditya Kumar · Last reviewed 2026-08-08
The most direct way to calculate Monthly Active Users (MAUs) for July 2022 is to count distinct user id s from your events table within that specific date range. Mechanics and Why This query…
This medium-level SQL question appears frequently in data engineering interviews at companies like NASDAQ. While less common, it tests deeper understanding that distinguishes strong candidates. Mastering the underlying concepts (partition) will help you answer variations of this question confidently.
Break this problem into components. Identify the core trade-offs involved, then walk the interviewer through your reasoning step by step. Demonstrate awareness of edge cases and production considerations - this is what separates good answers from great ones. The expert answer includes a code example that demonstrates the implementation pattern.
The most direct way to calculate Monthly Active Users (MAUs) for July 2022 is to count distinct user_ids from your events table within that specific date range.
SELECT
COUNT(DISTINCT user_id) AS mau
FROM
your_database.your_schema.events
WHERE
event_date BETWEEN '2022-07-01' AND '2022-07-31';
This query identifies all unique users who performed at least one event between July 1st and July 31st, 2022. COUNT(DISTINCT user_id) is crucial as it ensures each user is counted only once, regardless of how many events they generated. The WHERE clause filters the data to the target month. Alternatively, WHERE EXTRACT(YEAR FROM event_date) = 2022 AND EXTRACT(MONTH FROM event_date) = 7 achieves the same date filtering, though BETWEEN can sometimes be more performant as it avoids function application on the column, potentially allowing for better index or partition utilization.
Calculating COUNT(DISTINCT) is computationally expensive, especially on large datasets, as it often requires shuffling all distinct values to a single node or group for aggregation. To optimize, ensure your events table is partitioned or clustered by event_date (e.g., daily or monthly partitions in systems like Spark, Snowflake, or Delta Lake). This allows for partition pruning, where the query engine only scans relevant data files for July 2022, significantly reducing I/O and cost. Without proper partitioning, the query might perform a full table scan. For extremely large datasets where exact MAU isn't strictly required, consider using approximate distinct counting algorithms like HyperLogLog (HLL) functions (e.g., APPROX_COUNT_DISTINCT in BigQuery or Spark SQL). These offer significant performance gains with a small, configurable error margin, making them suitable for dashboards or trends where absolute precision isn't paramount.
Discuss how you'd define "active" (e.g., any event vs. specific key events) and the importance of data freshness for MAU calculations.
Red Flag: COUNT(*) instead of COUNT(DISTINCT user_id). Pro-Move: 'We use HLL for approximate MAU at 10B events; exact for reporting.'
Some links below are affiliate links. If you buy through them we may earn a small commission at no extra cost to you — it helps keep DataEngPrep free.
According to DataEngPrep.tech, this is one of the most frequently asked SQL interview questions, reported at 1 company. DataEngPrep.tech maintains an editor-reviewed database of 1,863 data engineering interview questions across 7 categories.