Jer*_*iho 27 scala scalaquery slick
我想强制光滑创建像
select max(price) from coffees where ...
Run Code Online (Sandbox Code Playgroud)
但光滑的文档没有帮助
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
Run Code Online (Sandbox Code Playgroud)
因为那些q1-q4不是查询,我无法获得结果,但可以在其他查询中使用它们.
这个说法
for {
coffee <- Coffees
} yield coffee.price.max
Run Code Online (Sandbox Code Playgroud)
生成正确的查询但不推荐使用(生成警告:"不推荐使用类ColumnExtensionMethods中的方法max:使用Query.max"). 如何在没有警告的情况下生成此类查询?
另一个问题是通过以下方式聚合:
"select name, max(price) from coffees group by name"
Run Code Online (Sandbox Code Playgroud)
试图解决它
for {
coffee <- Coffees
} yield (coffee.name, coffee.price.max)).groupBy(x => x._1)
Run Code Online (Sandbox Code Playgroud)
产生
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
Run Code Online (Sandbox Code Playgroud)
这会导致明显的db错误
column "x5.COF_NAME" must appear in the GROUP BY clause or be used in an aggregate function
Run Code Online (Sandbox Code Playgroud)
如何生成这样的查询?
EEC*_*LOR 31
据我所知,第一个就是简单
Query(Coffees.map(_.price).max).first
Run Code Online (Sandbox Code Playgroud)
第二个
val maxQuery = Coffees
.groupBy { _.name }
.map { case (name, c) =>
name -> c.map(_.price).max
}
maxQuery.list
Run Code Online (Sandbox Code Playgroud)
要么
val maxQuery = for {
(name, c) <- Coffees groupBy (_.name)
} yield name -> c.map(_.price).max
maxQuery.list
Run Code Online (Sandbox Code Playgroud)