例如,我有以下表定义:
object Houses extends Table[Long]("Houses") {
def id = column[Long]("id")
def * = id
}
object Rooms extends Table[(Long, Long)]("Rooms") {
def id = column[Long]("id")
def houseId = column[Long]("houseId")
def size = column[Int]("size")
def * = id ~ houseId ~ size
}
我想为每个房子选择最大的房间。
我想出了以下技巧:
val query = {
(r1, r2) <- Rooms leftJoin Rooms on ((r1,r2) =>
r1.houseId === r2.houseId && r1.size > r2.size
)
if r2.id.isNull
} yield r1
它可以满足我的需要,但是丑陋,完全不可读,并且似乎会损害性能。我尝试groupBy
在查询中使用,但似乎我误解了一些核心概念 - 我无法正确输入类型。
有没有更好的方法在 Slick 中进行此类聚合查询?