Scala 如何使用slick创建聚合

Scala 如何使用slick创建聚合,scala,scalaquery,slick,Scala,Scalaquery,Slick,我想强制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不是查询,所以我无

我想强制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
我试着用

for {
  coffee <- Coffees
} yield (coffee.name, coffee.price.max)).groupBy(x => x._1)
这会导致明显的数据库错误

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

如何生成这样的查询?

据我所知,这是第一个简单的查询

Query(Coffees.map(_.price).max).first
第二个呢

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

maxQuery.list


首先,IIRCThank,我在AnswerThank中更改了它,这两个示例都有效,第二个生成优化查询select x2.COF_NAME,maxx2.PRICE from COFFES x2 group by x2.COF_NAME,但是,第一个查询使用2个子查询从select maxx4.x5生成select x2.x3作为x3从select x6.PRICE作为x5从COFFES x6 x4 x2生成x3-查询,而不是使用不推荐的api从COFFES x2生成简单的select maxx2.PRICE。看来狡猾的开发人员过早地不推荐这个api。注意:在Slick2中,需要run方法,而不是list/first,请参阅
Query(Coffees.map(_.price).max).first
val maxQuery = Coffees
  .groupBy { _.name }
  .map { case (name, c) =>
    name -> c.map(_.price).max
  }

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

maxQuery.list