Adventures in Machine Learning

Mastering WHERE and HAVING Clauses in SQL for Data Analysis

Do you want to learn how to manipulate and analyze large datasets using SQL? If so, you likely want to begin by understanding WHERE and

HAVING clauses.

These two SQL commands are essential in building complex queries that allow you to drill down into data and extract meaningful insights. In this article, well explore everything you need to know about WHERE and HAVING in SQL.

Understanding WHERE and HAVING in SQL

Before diving into WHERE and HAVING, lets start with a basic understanding of a dataset. Suppose a social agency collects data from various households about their annual incomes.

They would likely want to measure several metrics, such as the total family income or household income per member.

If we want to query this data to find out, for instance, how many households have an annual income above $50,000, we would need to apply some filters.

This is where the

WHERE clause comes in.

WHERE clause


WHERE clause allows you to filter records based on a specific condition. Using the example above, we could apply the following

WHERE clause to find households with annual incomes above $50,000:



FROM social_agency_data

WHERE annual_income > 50000;


This query would return all records (i.e, households) with an annual income greater than $50,000.

So, we have filtered out all households that don’t meet this condition.

HAVING clause

Now lets consider a slightly different scenario, such as grouping household incomes by family and determining the average income per family member. In this case, we need a way to filter records based on group-level conditions.

Enter the

HAVING clause.

HAVING clause is similar to

WHERE clause but is used for filtering grouped records. The

HAVING clause filters groups based on specific conditions.

Lets say, we want to see how many households have an income above $60,000 with a grouping of family revenue:


SELECT family, AVG(annual_income) as average_income

FROM social_agency_data

GROUP BY family

HAVING AVG(annual_income) > 60000;


This query is grouping household incomes based on their family, calculating the average annual income per family. Next, it filters the output records so that we only see records where the average annual income per family is greater than $60,000.

Complex HAVING Clauses

When it comes to complex queries, we often need to use aggregate functions such as SUM, AVG, MAX, and COUNT, along with

HAVING clauses. Let’s suppose we want to find the number of households where the average family income is below $35,000.


SELECT family, AVG(annual_income) as average_income, COUNT(*) as num_members

FROM social_agency_data

GROUP BY family

HAVING SUM(annual_income)/COUNT(*) < 35000;


In this query, we’re using three aggregate functions (AVG, COUNT, and SUM) to first calculate the average income per family member and the number of members in each family. We then apply the

HAVING clause to filter the groups based on a specific condition.

Using WHERE and HAVING in the Same SQL Query

You can use WHERE and

HAVING clauses in the same SQL query. Here’s an example of how to get a list of households that earn above $60,000 and have less than 4 family members:


SELECT family, SUM(annual_income) as total_income, COUNT(*) as num_members, SUM(annual_income)/COUNT(*) as income_per_member

FROM social_agency_data

WHERE city = ‘Oklahoma City’

GROUP BY family

HAVING SUM(annual_income) > 60000 AND COUNT(*) < 4;


This query first applies the

WHERE clause to only consider records from Oklahoma City and then groups records by family and applies a

HAVING clause to filter out groups that do not meet the conditions specified.

WHERE and HAVING in Complex Queries

In some cases, using WHERE and HAVING together in a single query may not be enough to filter data to meet specific requirements. This is where subqueries come in.

Let’s say we want to find the average income of households in each city and then filter cities based on whether their average household income is above the average income of all cities. We can use subqueries to achieve this:


SELECT city, AVG(annual_income) as avg_income

FROM social_agency_data


HAVING AVG(annual_income) > (SELECT AVG(annual_income)

FROM social_agency_data);


This query first groups household incomes by city and computes the average income per city. It then applies the

HAVING clause to filter cities whose average income is greater than the average income of all cities.

Differences Between WHERE and HAVING

So, what are the differences between the WHERE and

HAVING clauses? In short, the

WHERE clause is used for filtering record-level data, while the

HAVING clause is used for filtering grouped data.

Syntax and Usage

In terms of syntax, the

WHERE clause comes before the grouping clause, while the

HAVING clause comes after the grouping clause. Moreover, the

WHERE clause can contain any logical expression, while the

HAVING clause can only contain aggregate functions and comparisons that aggregate function results.


In contrast, the

WHERE clause is suited for detailed filtering of individual records, whereas the

HAVING clause is suited for filtering the outcome of aggregate functions.

WHERE clauses can involve subqueries to filter down the data needed for grouping.

HAVING clauses cannot include subqueries.


The WHERE and

HAVING clauses are two fundamental SQL commands that allow you to filter, sort, and aggregate data. WHERE is used to filter record-level data, and HAVING is used to filter grouped data.

By mastering these commands, you can build complex queries and extract meaningful insights from large datasets. Learning how to create basic SQL reports is a fundamental skill for anyone working with databases.

It allows you to extract valuable insights from data to inform business decisions effectively. If you’re looking to improve your SQL skills, a basic SQL Reports course could be the perfect starting point.

In this expansion, we’ll explore LearnSQL’s Creating Basic SQL Reports course and how it can help you master the basics of SQL reports. What is LearnSQL?

LearnSQL is a comprehensive online learning platform designed to teach SQL to individuals of all levels. It offers a wide range of courses, from basic SQL fundamentals to advanced SQL skills like working with Big Data and Full-text search.

LearnSQL’s courses are designed to deliver efficient and organized learning, making it easy for users to understand complex concepts and techniques. What is Creating Basic SQL Reports?

Creating Basic SQL Reports is a popular course offered by LearnSQL that teaches learners how to extract insights from data using SQL queries. The course is suitable for beginners who have no previous experience with SQL and want to learn how to generate basic reports.

The course covers essential topics such as selecting data, filtering data, grouping data, and ordering data. These topics are essential to creating basic SQL reports that can be used to inform business decisions.

Moreover, the course provides users with hands-on practice, enabling them to gain sufficient knowledge and experience to build SQL reports independently. What Does the Course Cover?

The Creating Basic SQL Reports course is a series of well-designed tutorials with applicable examples, which make the process of learning SQL reporting straightforward and engaging. Here’s what you can expect to cover in the course: SQL Reporting: First, you’ll be introduced to SQL reporting, its importance, and why it is fundamental in business decision-making.

This module will cover the basics of creating reports, such as selecting, filtering, and sorting data. 2.

Working With Data: In this module, you will learn how to retrieve data from a database using SQL queries. You will also learn how to determine the best query to answer a specific question by understanding how to join and reference tables.

3. Filtering Data: This module teaches you how to filter data using WHERE and

HAVING clauses.

During the course of this module, you will learn about logical operators like AND, OR, and NOT statements, along with how to filter data based on Inequalities. 4.

Grouping and Aggregating Data: In this module, you’ll learn how to group data using GROUP BY and aggregate data using aggregate functions like COUNT, SUM, MIN, and MAX. You will also learn about using

HAVING clauses to filter data based on aggregate functions results.

5. Ordering Data: This module teaches you how to sort data using ORDER BY.

You will also learn how to sort data multiple columns and in different directions.


Putting It All Together: Finally, in this module, you will bring together everything you have learned in the prior modules to create some simple reporting examples. This will include things like creating cross-tabular reports and creating comparative reports for multiple time periods.

Why Select LearnSQL’s Creating Basic SQL Reports Course? LearnSQL’s Creating Basic SQL Reports course is perfect for beginners who are looking to learn the fundamentals of SQL reporting.

It is self-paced, so you can learn at your own speed and within your own comfort zones. The course is also entirely online, available whenever and wherever you need it.

Moreover, the course teaches practical skills using real-world examples, which is incredibly helpful when looking to apply those skills outside of a learning environment. The platform’s gamification elements also keep you engaged and motivated by providing tangible proof of progression, badges based on performance, and certificates of completion.


In summary, the LearnSQL’s Creating Basic SQL Reports course provides an excellent opportunity for beginners to get started with SQL reports. The course covers basic the topics essential for creating basic SQL reports, such as selecting data, filtering data, grouping data, and ordering data, among others.

The platform’s gamification elements, pragmatic examples, and self-driven pace make learning easier and more enjoyable. In conclusion, mastering the basics of SQL report creation is fundamental for any data professional.

LearnSQL’s Creating Basic SQL Reports course is an excellent resource for individuals looking to improve their SQL skills. The course covers the essential topics of SQL reporting – selecting, filtering, grouping, ordering data – and provides practical examples and self-paced learning to facilitate skill development.

By taking this course, individuals can gain the skills necessary to extract insights from data and make informed business decisions.

Popular Posts