如何按左连接表中的列进行分组?我需要做这样的事情:
val query = (for {
(region, item)
<- regionsTable.joinLeft(itemsTable).on(_.regionId === _.regionId)
} yield (region, item))
.groupBy({
case (region, item) => (region.regionId, item.createdAt)
})
但此代码无效,因为value createdAt is not a member of slick.lifted.Rep...
即使createdAt
(即整个item
)为NULL
,也可以按这些字段进行分组?
答案 0 :(得分:0)
我建议这样的事情:
val query = (for {
(region, item)
<- regionsTable.joinLeft(itemsTable).on(_.regionId === _.regionId)
} yield (region, item))
.groupBy({
case (region, item) => (region.regionId, item.map(_.createdAt))
})
我在groupBy 中添加了item.map(_.createdAt)
。
但这不起作用(虽然它会编译),因为你需要添加一些投影(这就是group by
在SQL中的工作原理 - 你可以在你的投影中得到group by或/的列和聚合值。
更改它的最简单方法就是这样(虽然您应该添加所需的投影,可能需要一些聚合):
val query = (for {
(region, item)
<- regionsTable.joinLeft(itemsTable).on(_.regionId === _.regionId)
} yield (region, item))
.groupBy{
case (region, item) => (region.regionId, item.map(_.createdAt))
}.map { ((regionId, createdAt), _) =>
(regionId, createdAt)
}
我在map
之后添加了groupBy
。