GROUP BY with NULL values behavior in SQL - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
When using GROUP BY in SQL, it groups rows based on column values, including NULLs.
We want to understand how the time to group grows as the number of rows increases, especially with NULL values.
Analyze the time complexity of this SQL query:
SELECT department, COUNT(*)
FROM employees
GROUP BY department;
This query groups employees by their department, counting how many are in each. Some departments may be NULL.
Look at what repeats as the query runs:
- Primary operation: Scanning each row to find its department value.
- How many times: Once for every row in the employees table.
As the number of rows grows, the query must check each one to group it.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 checks |
| 100 | About 100 checks |
| 1000 | About 1000 checks |
Pattern observation: The work grows directly with the number of rows.
Time Complexity: O(n)
This means the time to group grows in a straight line with the number of rows.
[X] Wrong: "NULL values cause the query to run slower because they need special handling in GROUP BY."
[OK] Correct: NULLs are treated as a regular group value, so they don't add extra time beyond scanning rows.
Understanding how grouping scales helps you explain query performance clearly and confidently.
What if we added an ORDER BY after GROUP BY? How would that affect the time complexity?
Practice
NULL values when you use GROUP BY on a column containing them?Solution
Step 1: Understand how GROUP BY handles NULLs
In SQL,GROUP BYtreats allNULLvalues in a column as equal, grouping them into one group.Step 2: Confirm behavior with example
If a column has multiple rows withNULL, they appear as a single group in the result.Final Answer:
All NULL values are grouped together as one group. -> Option AQuick Check:
GROUP BY NULL = one group [OK]
- Thinking NULLs are ignored in GROUP BY
- Assuming each NULL is a separate group
- Believing GROUP BY errors on NULL values
NULL values?Solution
Step 1: Check GROUP BY syntax with NULLs
SELECT category, COUNT(*) FROM products GROUP BY category; uses correct syntax: grouping by category including NULLs. GROUP BY works with NULL values without extra filters.Step 2: Analyze other options
Options A and D misuse WHERE and HAVING clauses with GROUP BY. SELECT category, COUNT(*) FROM products WHERE category IS NOT NULL GROUP BY category; filters out NULLs before grouping, which is valid but excludes NULL groups.Final Answer:
SELECT category, COUNT(*) FROM products GROUP BY category; -> Option AQuick Check:
GROUP BY with NULLs needs no special filter [OK]
- Using WHERE after GROUP BY (syntax error)
- Filtering NULLs before grouping unintentionally
- Misusing HAVING clause for filtering NULLs
sales with data:product | region -------|-------- A | East B | NULL A | NULL B | East NULL | West NULL | NULL
What is the result of:
SELECT region, COUNT(*) FROM sales GROUP BY region ORDER BY region;
Solution
Step 1: Group rows by region including NULLs
Rows with region 'East' = 2, 'West' = 1, and NULL values (3 rows) are grouped together as one NULL group.Step 2: Understand NULL display and count
SQL returns NULL as null (not string 'NULL'). Count for NULL group is 3 because three rows have region NULL. ORDER BY region ASC places null first.Final Answer:
[{"region": null, "count": 3}, {"region": "East", "count": 2}, {"region": "West", "count": 1}] -> Option DQuick Check:
GROUP BY NULL groups count 3, NULL shown as null [OK]
- Counting NULL rows separately
- Displaying NULL as string 'NULL'
- Miscounting NULL group size
SELECT department, COUNT(*) FROM employees GROUP BY department;
It returns an error. Which fix will correctly handle
NULL values in department to avoid errors?Solution
Step 1: Understand why no error occurs
In standard SQL,GROUP BYhandlesNULLvalues correctly by grouping all NULLs together into one group. No error is thrown.Step 2: Confirm no fix needed
The query runs successfully and includes a NULL group in the results.Final Answer:
No fix needed; GROUP BY never errors on NULL. -> Option BQuick Check:
GROUP BY NULL = no error [OK]
- Thinking GROUP BY errors on NULLs
- Unnecessarily filtering out NULLs with WHERE
- Misusing HAVING for pre-group filtering
orders with columns customer_id and status, where status can be NULL. You want to count orders by status, treating all NULL statuses as 'Pending'. Which query correctly achieves this?Solution
Step 1: Replace NULL with 'Pending' using COALESCE
COALESCE(status, 'Pending') converts NULL statuses to 'Pending' for counting.Step 2: Group by the alias used in SELECT
Grouping byorder_statusensures all NULLs are counted under 'Pending'.Final Answer:
SELECT COALESCE(status, 'Pending') AS order_status, COUNT(*) FROM orders GROUP BY order_status; -> Option CQuick Check:
COALESCE + GROUP BY alias counts NULL as 'Pending' [OK]
- Filtering out NULLs instead of replacing them
- Using WHERE after GROUP BY (syntax error)
- Grouping by original column without COALESCE
