8
例如,我有以下表定義:如何在Slick中進行彙總查詢?
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中做這樣的聚合查詢?
謝謝!具有'存在'的版本確實快得多,並且行距減少了30倍。 – Rogach