# `HAVING` Clause

Unlike where clause which imposes conditions on columns `Having` clause enables you to specify conditions that filter which group results appear in the results.

## Syntax

```sql
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);
```

## Description

- Used with `aggregate functions`
- Must follow `GROUP BY` clause in the query

## Aggregate Functions
- SQL aggregation is the task of collecting a set of values to return a single value.
- An aggregate function is a function where the values of multiple rows are grouped together as input on certain criteria to form a single value of more significant meaning.

## Aggregate Functions Examples

Suppose this are the table given to us

|Students | table||
|--------|-----------|--------|
| rollno | name | class |
| 1 | Sanskriti | TE |
| 1 | Shree | BE |
| 2 | Harry | TE |
| 3 | John | TE |
| 3 | Shivani | TE |


|purchase | table||
|------------|-------|---------------|
| item | price | customer_name |
| Pen | 10 | Sanskriti |
| Bag | 1000 | Sanskriti |
| Vegetables | 500 | Sanskriti |
| Shoes | 5000 | Sanskriti |
| Water Bottle | 800 | XYZ |
| Mouse | 120 | ABC |
| Sun Glasses | 1350 | ABC |


### AVG function

Calculates `average` of the given column of values

```sql
SELECT AVG(price) AS Avg_Purchase, customer_name
FROM purchase
GROUP BY customer_name;
```

| Avg_Purchase | customer_name |
|--------------|---------------|
| 1627.5000 | Sanskriti |

### SUM function

Calculates `sum` of values of given column.

```sql
SELECT SUM(price) AS Total_Bill, customer_name
FROM purchase
GROUP BY customer_name;
```

| Total_Bill | customer_name |
|------------|---------------|
| 6510 | Sanskriti |

### COUNT function

Gives `count` of entries/ values in given column.

```sql
SELECT COUNT(item) AS Total_Items, customer_name
FROM purchase
GROUP BY customer_name;
```

| Total_Items | customer_name |
|-------------|---------------|
| 4 | Sanskriti |

### MAX function

Return `maximum` value from the number of values in the column.

```sql
SELECT MAX(price) AS Highest_Purchase, customer_name
FROM purchase
GROUP BY customer_name;
```

| Highest_Purchase | customer_name |
|-----------------|---------------|
| 5000 | Sanskriti |

### MIN function

Return `minimum` value from the number of values in the column.

```sql
SELECT MIN(price) AS Lowest_Purchase, customer_name
FROM purchase
GROUP BY customer_name;
```
| Lowest_Purchase | customer_name |
|-----------------|---------------|
| 10 | Sanskriti |


## Having clause Examples

### Example 1

```sql
SELECT COUNT(class) AS strength, class
FROM Students
GROUP BY class
HAVING COUNT(class) > 2;
```

Above query gives number of students in a class `having` number of students > 2

| strength | class |
|----------|-------|
| 4 | TE |

### Example 2

```sql
SELECT customer_name, MIN(price) AS MIN_PURCHASE
FROM purchase
GROUP BY customer_name
HAVING MIN(price) > 10;
```
Above query finds `minimum` price which is > 10

| customer_name | MIN_PURCHASE |
|---------------|------------|
| XYZ | 800 |
| ABC | 120 |

### Example 3

```sql
SELECT customer_name, AVG(price) AS Average_Purchase
FROM purchase
GROUP BY customer_name
HAVING AVG(price) > 550
ORDER BY customer_name DESC;
```
Above query calculates `average` of price and prints customer name and average price which is greater than 550 with descending `order` of customer names.

| customer_name | Average_Purchase |
|---------------|------------------|
| XYZ | 800.0000 |
| Sanskriti | 1627.5000 |
| ABC | 735.0000 |

### Example 4

```sql
SELECT customer_name, SUM(price) AS Total_Purchase
FROM purchase
WHERE customer_name
LIKE "S%"
GROUP BY customer_name
HAVING SUM(price) > 1000;
```
Calculates `SUM` of price and returns customer name and sum > 1000.

| customer_name | Total_Purchase |
|---------------|----------------|
| Sanskriti | 6510 |


person
navigate_before Table of Contents expand_more navigate_next
Loading Page hourglass_empty