11

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

pathikrit
  • 32,469
  • 37
  • 142
  • 221

1 Answers1

7

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.

Tim Harper
  • 2,561
  • 20
  • 23