| --- |
| layout: doc_page |
| --- |
| # Filter groupBy Query Results |
| 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: |
| |
| ```json |
| { |
| "type": "equalTo", |
| "aggregation": <aggregate_metric>, |
| "value": <numeric_value> |
| } |
| ``` |
| |
| This is the equivalent of `HAVING <aggregate> = <value>`. |
| |
| #### 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: |
| |
| ```json |
| { |
| "type": "greaterThan", |
| "aggregation": <aggregate_metric>, |
| "value": <numeric_value> |
| } |
| ``` |
| |
| This is the equivalent of `HAVING <aggregate> > <value>`. |
| |
| #### 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: |
| |
| ```json |
| { |
| "type": "lessThan", |
| "aggregation": <aggregate_metric>, |
| "value": <numeric_value> |
| } |
| ``` |
| |
| This is the equivalent of `HAVING <aggregate> < <value>`. |
| |
| ### Logical expression filters |
| |
| #### AND |
| |
| The grammar for an AND filter is as follows: |
| |
| ```json |
| { |
| "type": "and", |
| "havingSpecs": [<having clause>, <having clause>, ...] |
| } |
| ``` |
| |
| 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: |
| |
| ```json |
| { |
| "type": "or", |
| "havingSpecs": [<having clause>, <having clause>, ...] |
| } |
| ``` |
| |
| 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: |
| |
| ```json |
| { |
| "type": "not", |
| "havingSpec": <having clause> |
| } |
| ``` |
| |
| The having clause specified at `havingSpec` can be any other having clause defined on this page. |