scala scalaquery slick

scala - Como hacer agregaciones con slick.



scalaquery (1)

Por lo que puedo decir es el primero simplemente

Query(Coffees.map(_.price).max).first

Y el segundo

val maxQuery = Coffees .groupBy { _.name } .map { case (name, c) => name -> c.map(_.price).max } maxQuery.list

o

val maxQuery = for { (name, c) <- Coffees groupBy (_.name) } yield name -> c.map(_.price).max maxQuery.list

Quiero forzar mancha para crear consultas como

select max(price) from coffees where ...

Pero la documentación de Slick no ayuda.

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

Debido a que esos q1-q4 no son consultas, no puedo obtener los resultados pero puedo usarlos dentro de otras consultas.

Esta declaración

for { coffee <- Coffees } yield coffee.price.max

genera una consulta correcta pero está en desuso (genera una advertencia: "el método max en la clase ColumnExtensionMethods está en desuso: use Query.max en su lugar"). ¿Cómo generar dicha consulta sin avisos?

Otro problema es agregar al grupo por:

"select name, max(price) from coffees group by name"

Intenté resolverlo con

for { coffee <- Coffees } yield (coffee.name, coffee.price.max)).groupBy(x => x._1)

que genera

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

lo que causa el error db obvio

column "x5.COF_NAME" must appear in the GROUP BY clause or be used in an aggregate function

¿Cómo generar tal consulta?