【问题标题】:Do Aggregation with Slick使用 Slick 进行聚合
【发布时间】:2017-08-21 06:06:12
【问题描述】:

我的数据库结构如下:

标识 |内容

我如何获得具有最大 id(不仅仅是 id)的 条目

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

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

【问题讨论】:

    标签: scala slick scalaquery


    【解决方案1】:

    要检索另一列,您可以执行以下操作。下面的示例计算一列的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]]
    

    【讨论】:

      猜你喜欢
      • 2013-02-17
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      • 2013-11-19
      • 1970-01-01
      • 2020-05-02
      • 1970-01-01
      相关资源
      最近更新 更多