How to select max, min in same query in slick

3.3k Views Asked by At

I want to do this SELECT MAX(age), MIN(age) FROM users WHERE name = 'Rick'. The best I came up with involves 2 queries: Users.filter(_.name === 'Rick').map(_.age).max

1

There are 1 best solutions below

0
Tim Harper On BEST ANSWER

This is supported, but first, you'll need to group it. Since you're treating the entire set as a group, group it by true and slick will ignore it when generating the SQL:

val q = Users.filter(_.name === 'Rick').groupBy { _ => true }.map {
  case (_, group) =>
    (group.map(_.age).max, group.map(_.age).min)
}

It should yield you something like this:

q.selectStatement
# => select max(x2."age"), min(x2."age") from "Users" x2

Another approach you might try would be a union.