---
title: HAVING Examples
---
## Simple HAVING
The `having` method can be used to filter the results of a `groupBy` query:
$.from(Contact)
.join(Order, { on:(c,o) => $`${c.id} = ${o.contactId}` })
.groupBy(c => $`${c.city}`)
.having(c => $`COUNT(${c.id}) > 5`)
.select(c => $`${c.city}, COUNT(${c.id})`)
## Multiple HAVING
Multiple having's can be added in one or multiple `having` methods:
const q = $.from(Contact)
.join(Order, { on:(c,o) => $`${c.id} = ${o.contactId}` })
.groupBy(c => $`${c.city}`)
.select(c => $`${c.city}, COUNT(${c.id})`)
db.all(q.clone().having((c,o) => $`COUNT(${c.id}) > 5 AND SUM(${o.total}) < 1000`))
db.all(q.clone()
.having(c => $`COUNT(${c.id}) > 5`).having((_,o) => $`SUM(${o.total}) < 1000`))
## HAVING Builder
When more flexibility is needed, `$.having` can be used to create a HAVING builder which can be constructed independently
of the query:
$.from(Contact)
.join(Order, { on:(c,o) => $`${c.id} = ${o.contactId}` })
.groupBy(c => $`${c.city}`)
.having(
$.having(Contact,Order)
.add(c => $`COUNT(${c.id}) > 5`)
.add((_,o) => $`SUM(${o.total}) < 1000`)
).select(c => $`${c.city}, COUNT(${c.id})`)
## Reset HAVING
Calling `having` with no arguments will reset the ORDER BY clause:
$.from(Contact).having`name`.having().select`name`