COUNTIF Function in SQL ⬅️➡️ SQL Server Way for Count Aggregate

Learn how to implement the COUNTIF function in SQL Server to count the number of rows that match specific criteria in a query. Tutorial on SQL COUNT 📖

SQL COUNT and COUNTIF Functions Explained

SQL is a widely used language for working with relational databases. Two commonly used SQL functions for counting rows in a table are COUNT and COUNTIF. In this article, we will explore the syntax, usage, examples, and advanced techniques for these handy SQL functions.

What is the COUNT Function in SQL?

The COUNT function is an aggregate function in SQL that allows you to count the number of rows matching the criteria specified in the query.




COUNT(DISTINCT expression)

The COUNT function can be used in the following ways:

  • COUNT(*) – Counts all rows in the specified table, including NULL values
SELECT COUNT(*) FROM employees;
  • COUNT(column) – Counts all non-NULL values in a specific column
SELECT COUNT(department) FROM employees;
  • COUNT(DISTINCT column) – Counts unique non-NULL values in a column
SELECT COUNT(DISTINCT department) FROM employees;

The COUNT function is supported in all major RDBMS like MySQL, SQL Server, Oracle, PostgreSQL etc. It returns an integer indicating the number of rows counted.

Counting Rows in a Table with COUNT(*)

Here is an example of using COUNT(*) to count all rows in a table:

SELECT COUNT(*) FROM employees;

This would return the total number of rows in the employees table, regardless of NULL values.

Counting Non-NULL Values with COUNT(column)

To count non-NULL values in a specific column, you can specify the column name as the expression:

SELECT COUNT(department) FROM employees;

This counts the number of rows in the employees table that have a non-NULL value for the department column.

Counting Distinct Values with COUNT(DISTINCT column)

Use the DISTINCT keyword to eliminate duplicates and count only distinct values in a column:

SELECT COUNT(DISTINCT department) FROM employees;

This counts the number of unique or distinct department values in the table.

Advanced COUNT Techniques

In addition to simple counting, the COUNT function can be combined with other SQL clauses for more advanced analysis:

Count in Specific Groups with GROUP BY

Calculate counts by distinct groups using the GROUP BY clause:

SELECT department, COUNT(*) FROM employees GROUP BY department;

This gives the count of employees in each department.

Filter Counts with HAVING

To filter groups based on the COUNT value, use HAVING:

SELECT department, COUNT(*) FROM employees GROUP BY department HAVING COUNT(*) > 5;

This returns only departments with more than 5 employees.

Count in Windows with OVER()

Utilize COUNT as a window function to get rolling or cumulative counts:

SELECT employee_id, COUNT(*) OVER(ORDER BY start_date) AS running_count FROM employees;

Combine with CASE Statement

Use a CASE expression to count conditionally in different columns:

SELECT SUM(CASE WHEN department = 'Sales' THEN 1 ELSE 0 END) AS sales_count, SUM(CASE WHEN department = 'Marketing' THEN 1 ELSE 0 END) AS marketing_count FROM employees;

This provides separate counts for Sales and Marketing.

What is the COUNTIF Function in SQL?

While COUNT allows you to count rows based on all values or only non-NULL values, COUNTIF enables conditional counting – where you count rows only if they meet a specified criterion.



This syntax uses a CASE expression inside the COUNT function to evaluate each row against the condition and tallies the count accordingly.

Here is an example:

SELECT COUNT(CASE WHEN salary > 80000 THEN 1 ELSE 0 END) AS "High Salaries" FROM employees;

This counts the number of rows where the salary value is greater than 80000. The condition is evaluated for each row, with 1 added to the count if true and 0 if false.

SQL COUNTIF with Multiple Conditions

You can specify multiple conditions inside the CASE expression to perform more complex conditional counting:

SELECT COUNT(CASE WHEN salary > 80000 AND department = 'Sales' THEN 1 ELSE 0 END) AS "Sales Dept High Salaries" FROM employees;

This counts rows where both criteria are met – salary over 80000 and department is ‘Sales’.

Advanced COUNTIF Techniques

Some advanced uses of COUNTIF include:

Multiple CASE Statements

Use multiple CASE statements to count different conditions:

SELECT COUNT(CASE WHEN salary > 80000 THEN 1 ELSE 0 END) AS high_salaries, COUNT(CASE WHEN salary < 40000 THEN 1 ELSE 0 END) AS low_salaries FROM employees;

Subqueries Inside CASE

Leverage subqueries to evaluate complex conditions:

SELECT COUNT(CASE WHEN salary > (SELECT AVG(salary) FROM employees) THEN 1 ELSE 0 END) AS above_avg_salaries FROM employees;

Combining Aggregates with CASE

Combine CASE with SUM, AVG etc for additional analysis:

SELECT SUM(CASE WHEN department = 'Sales' THEN salary ELSE 0 END) AS total_sales_salaries FROM employees;


COUNT and COUNTIF are invaluable for data analysis and reporting. Here are some common use cases:

  • Determine total number of records in a table
  • Identify number of non-NULL values for a column
  • Calculate distinct values for a column
  • Filter counts based on conditions
  • Generate aggregate reports and statistics
  • Identify data quality issues through unexpected counts
  • Optimize queries by comparing counts across tables
  • Create KPIs and metrics for dashboards and reports

These functions provide concise yet powerful ways to understand the shape of your data. Mastering COUNT and COUNTIF can level up your SQL data skills.

Key Differences Between COUNT and COUNTIF

Understanding the distinctions between COUNT and COUNTIF is essential for efficiently working with data in SQL. These two functions serve similar purposes but have significant differences that cater to various data analysis needs:

  1. Simple Count vs. Conditional Count:
    • COUNT: The COUNT function is primarily used for straightforward aggregate counting. It calculates the total number of rows within a dataset, regardless of the values in those rows.
    • COUNTIF: In contrast, COUNTIF introduces the concept of conditional counting. It allows you to specify conditions or criteria that rows must meet to be included in the count. This enables you to perform more granular counts based on specific conditions.
  2. Expression Usage:
    • COUNT: When using COUNT, you can directly provide the expression you want to count, such as a column name or an asterisk (*) to count all rows.
    • COUNTIF: COUNTIF, on the other hand, requires the use of a CASE statement to define the conditions for counting. This adds a layer of flexibility by enabling you to create complex counting logic.
  3. Placement in Queries:
    • COUNT: The COUNT function can be easily incorporated into a SELECT statement or used in conjunction with GROUP BY to perform counts within result sets and aggregates.
    • COUNTIF: To utilize COUNTIF, it must be nested within a COUNT function. This nesting allows you to apply conditional counting within aggregation operations, such as counting specific rows within a group.
  4. Scope of Operation:
    • COUNT: COUNT operates at the row level, counting entire rows without regard to individual cell values.
    • COUNTIF: COUNTIF, conversely, operates on individual cell values within rows. It specifically counts values within rows that meet the specified conditions.
  5. Handling NULL Values:
    • COUNT: By default, COUNT includes NULL values in its count, meaning it counts all rows, including those with NULL values.
    • COUNTIF: In contrast, COUNTIF counts only non-NULL values that satisfy the given condition. It allows you to filter out NULL values from the count based on your criteria.

In summary, while COUNT provides a straightforward method for aggregating data, COUNTIF extends the functionality by introducing conditional logic. COUNTIF allows for more intricate counting operations, enabling you to apply specific conditions and filter rows accordingly. These differences make COUNTIF a valuable tool for performing precise and context-dependent counts in SQL, enhancing your data analysis capabilities.

( No ratings yet )
Leave a Reply

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: