slick - 返回值包含多个相关数据

实际问题,原始sql 一般可以这么干

select min(ts), max(ts) from message where content like ‘%read%’

我们遇到一个需求也是类似的不过 需要返回count(1)

方式如下

val aa = orders.
filter(_.id > 100L).groupBy(_ => true).map {
case (_, orders) => (orders.map(_.id).avg, orders.map(_.id).length)
}
println(aa.result.statements)
db.run(aa.result.asTry)

这里的小技巧是groupBy 而且是无条件的分组,也就是所有fitler结果都会在一组里,这样后面就可以重复使用这个 集合(orders)

目的当然是想形成一条sql

select avg(“ID”), count(1) from “ORDERS” where “ID” > 100 group by 0+