docs-v2/content/shared/sql-reference/having.md

1.9 KiB

The HAVING clause places conditions on results created by an aggregate operation on groups. The HAVING clause must follow the GROUP BY clause and precede the ORDER BY clause.

[!Note] The WHERE clause filters rows based on specified conditions before the aggregate operation. The HAVING clause filters rows based on specified conditions after the aggregate operation has taken place.

Syntax

SELECT_clause FROM_clause [WHERE_clause] [GROUP_BY_clause] [HAVING_clause] [ORDER_BY_clause] 

Examples

Return rows with an aggregate value greater than a specified number

SELECT
  MEAN("water_level") AS "mean_water_level", "location"
FROM
  "h2o_feet" 
GROUP BY
  "location"
HAVING
  "mean_water_level" > 5

{{< expand-wrapper >}} {{% expand "View example results" %}} The query returns on rows with values in the mean_water_level greater than 5 after the aggregate operation.

location mean_water_level
coyote_creek 5.359142420303919
{{% /expand %}}
{{< /expand-wrapper >}}

Return the average result greater than a specified number from a specific time range

SELECT 
  AVG("water_level") AS "avg_water_level", 
  "time" 
FROM 
  "h2o_feet" 
WHERE 
  time >= '2019-09-01T00:00:00Z' AND time <= '2019-09-02T00:00:00Z' 
GROUP BY 
  "time" 
HAVING 
  "avg_water_level" > 6.82 
ORDER BY 
  "time"

{{< expand-wrapper >}} {{% expand "View example results" %}}

The query calculates the average water level per time and only returns rows with an average greater than 6.82 during the specified time range.

time avg_water_level
2019-09-01T22:06:00Z 6.8225
2019-09-01T22:12:00Z 6.8405000000000005
2019-09-01T22:30:00Z 6.8505
2019-09-01T22:36:00Z 6.8325
{{% /expand %}}
{{< /expand-wrapper >}}