gpt4 book ai didi

scala - 如何使用 slick 进行聚合

转载 作者:行者123 更新时间:2023-12-03 10:15:26 25 4
gpt4 key购买 nike

我想强制灵活创建查询,如

select max(price) from coffees where ... 

但是 slick's documentation没有帮助
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

生成正确的查询但已弃用(生成警告:“不推荐使用类 ColumnExtensionMethods 中的方法 max:改为使用 Query.max”)。
如何在没有警告的情况下生成这样的查询?

另一个问题是与 group by 聚合:
"select name, max(price) from coffees group by name"

试图解决它
for {
coffee <- Coffees
} yield (coffee.name, coffee.price.max)).groupBy(x => x._1)

这产生
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

这会导致明显的数据库错误
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

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

maxQuery.list

关于scala - 如何使用 slick 进行聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15191057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com