Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Understanding COUNT(*) vs COUNT(column) in SQL
📖 Scenario: You work at a small bookstore. You have a table called sales that records each book sale. Some sales have a recorded discount_code, but some do not.You want to learn how to count total sales and how to count only sales where a discount code was used.
🎯 Goal: Build SQL queries to count total sales and count sales with discount codes, so you understand the difference between COUNT(*) and COUNT(discount_code).
📋 What You'll Learn
Create a table called sales with columns sale_id (integer) and discount_code (text, nullable).
Insert 5 rows into sales with some discount_code values NULL and some with text.
Write a query using COUNT(*) to count all sales.
Write a query using COUNT(discount_code) to count only sales with a discount code.
💡 Why This Matters
🌍 Real World
Counting total records and filtering counts based on column values is common in sales, inventory, and user data analysis.
💼 Career
Understanding COUNT(*) vs COUNT(column) helps in writing accurate SQL queries for reports and data insights in many data-related jobs.
Progress0 / 4 steps
1
Create the sales table and insert data
Create a table called sales with columns sale_id as integer and discount_code as text. Then insert these exact rows: (1, 'DISC10'), (2, NULL), (3, 'DISC20'), (4, NULL), (5, 'DISC30').
SQL
Hint
Use CREATE TABLE to define the table and INSERT INTO to add rows.
2
Write a query to count all sales using COUNT(*)
Write a SQL query that selects COUNT(*) from the sales table to count all rows, including those with NULL discount_code.
SQL
Hint
COUNT(*) counts all rows regardless of NULLs.
3
Write a query to count only sales with a discount code using COUNT(discount_code)
Write a SQL query that selects COUNT(discount_code) from the sales table to count only rows where discount_code is not NULL.
SQL
Hint
COUNT(column) counts only rows where the column is not NULL.
4
Add a query to show both counts side by side
Write a SQL query that selects both COUNT(*) and COUNT(discount_code) from the sales table in the same result, labeling them as total_sales and sales_with_discount.
SQL
Hint
Use AS to label columns in the result.
Practice
(1/5)
1. What is the main difference between COUNT(*) and COUNT(column_name) in SQL?
easy
A. COUNT(*) counts only rows where all columns are NOT NULL, COUNT(column_name) counts all rows.
B. COUNT(*) and COUNT(column_name) always return the same result.
C. COUNT(*) counts only NULL values, COUNT(column_name) counts non-NULL values.
D. COUNT(*) counts all rows, while COUNT(column_name) counts only rows where the column is NOT NULL.
Solution
Step 1: Understand COUNT(*)
COUNT(*) counts every row in the table, including those with NULL values in any column.
Step 2: Understand COUNT(column_name)
COUNT(column_name) counts only rows where the specified column is NOT NULL, ignoring rows where that column is NULL.
Final Answer:
COUNT(*) counts all rows; COUNT(column_name) counts only non-NULL values in that column. -> Option D
Quick Check:
COUNT(*) counts all rows, COUNT(column) skips NULLs [OK]
Hint: Remember: * counts all rows, column counts non-NULL only [OK]
Common Mistakes:
Thinking COUNT(column) counts NULL values
Assuming COUNT(*) ignores NULLs
Believing both always return same count
2. Which of the following SQL queries correctly counts the number of rows where the column email is NOT NULL?
easy
A. SELECT COUNT(email) FROM users;
B. SELECT COUNT(*) FROM users WHERE email IS NULL;
C. SELECT COUNT(email) FROM users WHERE email IS NULL;
D. SELECT COUNT(*) FROM users;
Solution
Step 1: Analyze COUNT(email)
COUNT(email) counts only rows where email is NOT NULL, so it already filters NULLs.
Step 2: Check the WHERE clause necessity
Adding WHERE email IS NOT NULL is redundant with COUNT(email), so SELECT COUNT(email) FROM users; is correct and simpler.
Final Answer:
SELECT COUNT(email) FROM users; -> Option A
Quick Check:
COUNT(column) counts non-NULL rows without WHERE [OK]
Hint: COUNT(column) counts non-NULL rows without extra WHERE [OK]
Common Mistakes:
Adding unnecessary WHERE clause with COUNT(column)
Using COUNT(*) with wrong WHERE condition
Confusing NULL and NOT NULL filters
3. Given the table orders with 5 rows where the discount column has values: 10, NULL, 5, NULL, 0, what will be the result of SELECT COUNT(*) AS total, COUNT(discount) AS discount_count FROM orders;?
medium
A. total = 5, discount_count = 3
B. total = 5, discount_count = 5
C. total = 3, discount_count = 3
D. total = 3, discount_count = 5
Solution
Step 1: Count total rows with COUNT(*)
COUNT(*) counts all 5 rows regardless of NULLs.
Step 2: Count non-NULL discount values with COUNT(discount)
Only 3 rows have non-NULL discount values (10, 5, 0), so discount_count is 3.
Final Answer:
total = 5, discount_count = 3 -> Option A
Quick Check:
COUNT(*) = all rows, COUNT(column) = non-NULL rows [OK]
Hint: COUNT(*) counts all rows; COUNT(column) skips NULLs [OK]
Common Mistakes:
Counting NULLs in COUNT(column)
Confusing total rows with non-NULL counts
Assuming 0 is NULL
4. You wrote this query: SELECT COUNT(column_name) FROM table_name; but it returns 0. The column has some NULL and some non-NULL values. What is the most likely problem?
medium
A. COUNT(column_name) counts NULL values, so it should not return 0.
B. The column_name is misspelled or does not exist in the table.
C. COUNT(*) should be used instead of COUNT(column_name) to count non-NULL values.
D. The table is empty, so COUNT(column_name) returns 0.
Solution
Step 1: Check column existence
If COUNT(column_name) returns 0 but column has non-NULL values, likely the column name is wrong or missing.
Step 2: Understand COUNT behavior
COUNT(column_name) counts non-NULL values; if column exists and has non-NULLs, result won't be zero.
Final Answer:
Column name is misspelled or does not exist. -> Option B
Quick Check:
Wrong column name causes zero count [OK]
Hint: Check column spelling if COUNT(column) returns zero unexpectedly [OK]
Common Mistakes:
Assuming COUNT(column) counts NULLs
Using COUNT(*) when column is misspelled
Ignoring empty table possibility without checking
5. You have a table employees with 100 rows. The phone_number column has 80 non-NULL values and 20 NULLs. You want to find how many employees have a phone number and how many total employees there are. Which query gives both counts correctly?
hard
A. SELECT COUNT(phone_number) + COUNT(*) AS total FROM employees;
B. SELECT COUNT(*) AS with_phone, COUNT(phone_number) AS total_employees FROM employees;
C. SELECT COUNT(phone_number) AS with_phone, COUNT(*) AS total_employees FROM employees;
D. SELECT COUNT(phone_number) AS total_employees, COUNT(*) AS with_phone FROM employees;
Solution
Step 1: Count employees with phone numbers
COUNT(phone_number) counts only non-NULL phone numbers, so it returns 80.
Step 2: Count total employees
COUNT(*) counts all rows, so it returns 100.
Final Answer:
SELECT COUNT(phone_number) AS with_phone, COUNT(*) AS total_employees FROM employees; -> Option C
Quick Check:
COUNT(phone_number) = 80, COUNT(*) = 100 [OK]
Hint: Use COUNT(column) for non-NULL, COUNT(*) for total rows [OK]