Как сделать агрегацию с пятном
Я хочу заставить Slick создавать запросы, такие как
select max(price) from coffees where ...
Нодокументация слика не помогает
val q = Coffees.map(_.price) //this is query Query[Coffees.type, ...]
val q1 = q.min // this is Column[Option[Double]]
val q2 = q.max
val q3 = q.sum
val q4 = q.avg
Поскольку эти q1-q4 не являются запросами, я не могу получить результаты, но могу использовать их в других запросах.
Это утверждение
for {
coffee <- Coffees
} yield coffee.price.max
генерирует правильный запрос, но не рекомендуется (генерирует предупреждение: «метод max в классе ColumnExtensionMethods устарел: вместо этого используйте Query.max»).Как сгенерировать такой запрос без предупреждений?
Другая проблема заключается в объединении с группой по:
"select name, max(price) from coffees group by name"
Пытался решить это с
for {
coffee <- Coffees
} yield (coffee.name, coffee.price.max)).groupBy(x => x._1)
который генерирует
select x2.x3, x2.x3, x2.x4 from (select x5."COF_NAME" as x3, max(x5."PRICE") as x4 from "coffees" x5) x2 group by x2.x3
который вызывает очевидную ошибку дБ
column "x5.COF_NAME" must appear in the GROUP BY clause or be used in an aggregate function
Как сгенерировать такой запрос?