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