# HAVING Clause

The **HAVING** clause filters data after grouping.

The **WHERE** clause sets conditions on selected columns, while the **HAVING** clause sets conditions on groups created by the **GROUP BY** clause.

## **Syntax**

```plaintext
""SELECT 
{ * | [column, ...] }
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY grouping_element [, ...] ]
[ HAVING condition [, ...] ]
[ ORDER BY {expression [ ASC | DESC ] }];
```

## **Parameter Description**

* **HAVING clause**
    
    Selects special groups by working with the **GROUP BY** clause. The **HAVING** clause compares some attributes of groups with a constant. Only groups that match the logical expression in the **HAVING** clause are extracted.
    

## **Examples**

In the following example, data is grouped based on the value of **c\_first\_name** which is less than **2**.

```plaintext
""openGauss=# SELECT c_first_name FROM customer_t1 GROUP BY c_first_name HAVING count(c_first_name) < 2;
```

The result is as follows:

```plaintext
"" c_first_name
--------------
 James
 Local

 Joes
(4 rows)
```

In the following example, data is grouped based on the value of **c\_first\_name** which is greater than **1**.

```plaintext
""openGauss=# SELECT c_first_name FROM customer_t1 GROUP BY c_first_name HAVING count(c_first_name) > 1;
```

The result is as follows:

```plaintext
"" c_first_name
--------------
 Grace
 Lily
(2 rows)
```

[Previous](https://docs.opengauss.org/en/docs/latest/docs/BriefTutorial/group-by-clause.html)
