Group By and Having
groupBy
Name
Type
Required
Default
Description
groups
string | array
true
A single column name, a list of column names, or an array of column names to group by. An Expression
can be passed as well.
Passing a single string will group by that one column.
query.from( "users" )
.groupBy( "country" );
SELECT *
FROM `users`
GROUP BY `country`
You can also pass a list of column names. A single comma (","
) will be used as the delimiter.
query.from( "users" )
.groupBy( "country,city" );
SELECT *
FROM `users`
GROUP BY `country`, `city`
An array of column names can be provided.
query.from( "users" )
.groupBy( [ "country", "city" ] );
SELECT *
FROM `users`
GROUP BY `country`, `city`
Calling groupBy
multiple times will to the current groups.
query.from( "users" )
.groupBy( "country" )
.groupBy( "city" );
SELECT *
FROM `users`
GROUP BY `country`, `city`
An Expression
can be passed in place of a column.
query.from( "users" )
.groupBy( query.raw( "DATE(created_at)" ) );
SELECT *
FROM `users`
GROUP BY DATE(created_at)
having
Name
Type
Required
Default
Description
column
string | Expression
true
The name of the column or Expression
with which to constrain the query.
operator
any
false
The operator to use for the constraint (i.e. "=", "<", ">=", etc.). A value can be passed as the operator
and the value
left null as a shortcut for equals (e.g. where( "column", 1 ) == where( "column", "=", 1 ) ).
combinator
string
false
"and"
The boolean combinator for the clause. Valid options are "and"
or "or"
. Avoid passing this parameter explicitly. Where possible use the andHaving
and orHaving
methods instead.
Adds a having clause to a query.
query.from( "users" )
.groupBy( "email" )
.having( "email", ">", 1 );
SELECT *
FROM `users`
GROUP BY `email`
HAVING `email` > ?
Expressions
can be used in place of the column or the value.
query.from( "users" )
.groupBy( "email" )
.having( query.raw( "COUNT(email)" ), ">", 1 );
SELECT *
FROM `users`
GROUP BY `email`
HAVING COUNT(email) > ?
Last updated
Was this helpful?