---
layout: doc_page
---
A having clause is a JSON object identifying which rows from a groupBy query should be returned, by specifying conditions on aggregated values.
It is essentially the equivalent of the HAVING clause in SQL.
Druid supports the following types of having clauses.
### Numeric filters
The simplest having clause is a numeric filter.
Numeric filters can be used as the base filters for more complex boolean expressions of filters.
#### Equal To
The equalTo filter will match rows with a specific aggregate value.
The grammar for an `equalTo` filter is as follows:
"having": {
"type": "equalTo",
"aggregation": ,
"value":
}
This is the equivalent of `HAVING = `.
#### Greater Than
The greaterThan filter will match rows with aggregate values greater than the given value.
The grammar for a `greaterThan` filter is as follows:
"having": {
"type": "greaterThan",
"aggregation": ,
"value":
}
This is the equivalent of `HAVING > `.
#### Less Than
The lessThan filter will match rows with aggregate values less than the specified value.
The grammar for a `greaterThan` filter is as follows:
"having": {
"type": "lessThan",
"aggregation": ,
"value":
}
This is the equivalent of `HAVING < `.
### Logical expression filters
#### AND
The grammar for an AND filter is as follows:
"having": {
"type": "and",
"havingSpecs": [, , ...]
}
The having clauses in `havingSpecs` can be any other having clause defined on this page.
#### OR
The grammar for an OR filter is as follows:
"having": {
"type": "or",
"havingSpecs": [, , ...]
}
The having clauses in `havingSpecs` can be any other having clause defined on this page.
#### NOT
The grammar for a NOT filter is as follows:
"having": {
"type": "not",
"havingSpec":
}
The having clause specified at `havingSpec` can be any other having clause defined on this page.