--- 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": , "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: ```json { "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: ```json { "type": "lessThan", "aggregation": , "value": } ``` This is the equivalent of `HAVING < `. ### Logical expression filters #### AND The grammar for an AND filter is as follows: ```json { "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: ```json { "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: ```json { "type": "not", "havingSpec": } ``` The having clause specified at `havingSpec` can be any other having clause defined on this page.