用光滑进行聚合

时间:2017-08-21 06:06:12

标签: scala slick scalaquery

我的数据库结构如下所示:

id |含量

我将使用最大ID(不仅仅是id)获取条目

我阅读了答案How to make aggregations with slick,但我发现声明中没有first方法:Query(Coffees.map(_.price).max).first。现在该怎么做?

如果我需要最高content项目的id怎么办?

1 个答案:

答案 0 :(得分:0)

要检索其他列,您可以执行以下操作。下面的示例计算一列的max,找到具有该最大值的行,并返回该行中另一列的值:

val coffees = TableQuery[Coffees]

val mostExpensiveCoffeeQuery =
  for {
    maxPrice <- coffees.map(_.price).max.result
    c <- maxPrice match {
      case Some(p) => coffees.filter(_.price === p).result
      case None => DBIO.successful(Seq())
    }
  } yield c.headOption.map(_.name)

val mostExpensiveCoffee = db.run(mostExpensiveCoffeeQuery)
// Future[Option[String]]

或者,要返回完整的Coffees对象:

val mostExpensiveCoffeeQuery =
  for {
    ...
  } yield c.headOption

val mostExpensiveCoffee = db.run(mostExpensiveCoffeeQuery)
// Future[Option[Coffees]]