When working with databases, one of the most common tasks is to count the number of rows or entries that meet specific conditions. Whether you're tracking the number of customers, orders, or any other entities in your database, the SQL COUNT()
function is a powerful tool for performing this task.
The COUNT()
function is an aggregate function in SQL, meaning it operates on a set of rows and returns a single value. It is used to count the number of rows or values in a specified column, based on the criteria you define in your query.
The basic syntax of the COUNT()
function is simple:
SELECT COUNT(column_name)
FROM table_name;
column_name
: The column for which you want to count the entries.table_name
: The table where the column is located.Let's say you have a customers
table, and you want to count how many customers are listed in the table.
SELECT COUNT(*) AS total_customers
FROM customers;
Result:
total_customers |
---|
150 |
This query will return the total number of rows (or customers) in the customers
table.
By default, COUNT(*)
counts all rows in a table. However, you can also use COUNT()
with a specific column to count only the non-NULL
values in that column.
SELECT COUNT(column_name)
FROM table_name;
column_name
: The column in which you want to count non-NULL
values.If you want to count how many customers have provided an email address (i.e., non-NULL
values in the email
column), you can write the following query:
SELECT COUNT(email) AS customers_with_email
FROM customers;
Result:
customers_with_email |
---|
130 |
This query returns the count of customers who have a non-NULL
email address.
COUNT(column_name)
only counts rows where the specified column contains a non-NULL
value. If there are NULL
values in that column, they will be excluded from the count.You can use the COUNT()
function with the DISTINCT
keyword to count the number of unique (distinct) values in a column.
SELECT COUNT(DISTINCT column_name)
FROM table_name;
column_name
: The column in which you want to count distinct values.Let's say you have a sales
table and you want to count how many unique products were sold. Assuming the table has a product_id
column:
SELECT COUNT(DISTINCT product_id) AS unique_products_sold
FROM sales;
Result:
unique_products_sold |
---|
50 |
This query returns the count of distinct product_id
s, meaning it counts the number of unique products sold.
You can also use the COUNT()
function in combination with the GROUP BY
clause to count rows for each group of data. This is useful when you want to perform counts on grouped data, such as counting the number of employees in each department or the number of orders per customer.
SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name;
column_name
: The column used to group the data.Suppose you have an employees
table with a department
column, and you want to count how many employees work in each department. You can use the following query:
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department;
Result:
department | employee_count |
---|---|
Sales | 25 |
Marketing | 15 |
Engineering | 30 |
This query groups the data by the department
column and counts how many employees are in each department.
You can combine COUNT()
with the HAVING
clause to filter groups based on the count. This is useful when you want to count records and then filter the results based on that count.
SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name
HAVING COUNT(*) > value;
value
: The threshold count that the groups must exceed to be included in the results.Suppose you want to find departments that have more than 20 employees. You can write the following query:
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department
HAVING COUNT(*) > 20;
Result:
department | employee_count |
---|---|
Sales | 25 |
Engineering | 30 |
This query returns only the departments where the number of employees exceeds 20.
It is important to note that COUNT(*)
counts all rows, including those where the column has NULL
values. However, when you use COUNT(column_name)
, it does not count rows where the column contains NULL
.
If you want to count how many orders were placed by customers who do not have an email address (i.e., where the email
column is NULL
), you can write:
SELECT COUNT(*) AS orders_without_email
FROM orders
WHERE email IS NULL;
Result:
orders_without_email |
---|
10 |
This query counts how many rows (orders) have a NULL
value in the email
column.
You can combine COUNT()
with other aggregate functions like SUM()
, AVG()
, MAX()
, and MIN()
in a single query. This is useful when you need to perform multiple calculations in one query.
Let’s say you want to find the total number of orders, the total sales amount, and the average sale amount in the orders
table.
SELECT COUNT(*) AS total_orders,
SUM(amount) AS total_sales,
AVG(amount) AS average_sale
FROM orders;
Result:
total_orders | total_sales | average_sale |
---|---|---|
500 | 1000000 | 2000 |
This query returns the total number of orders, the total sales amount, and the average sale amount from the orders
table.