Как выбрать максимум, минимум в том же запросе в slick

Я хочу сделать это SELECT MAX(age), MIN(age) FROM users WHERE name = 'Rick'. Лучшее, что я придумал, включает 2 запроса: Users.filter(_.name === 'Rick').map(_.age).max


person pathikrit    schedule 20.11.2014    source источник


Ответы (1)


Это поддерживается, но сначала вам нужно его сгруппировать. Поскольку вы рассматриваете весь набор как группу, сгруппируйте его по true, и slick проигнорирует его при создании SQL:

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

Это должно дать вам что-то вроде этого:

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

Другой подход, который вы могли бы попробовать, - это союз.

person Tim Harper    schedule 21.11.2014