Slick 3 dynamic groupby - 其List [String]中的字段

时间:2016-01-10 12:49:46

标签: scala playframework slick slick-3.0

假设我想执行查询:

select columnName1,columnName2,Sum(*)
from table
group by columnName1,columnName2

其中columnName1,columnName2由list [string](“columnName1”,columnName2“)提供

我怎么能用光滑的方式做到这一点? 如果列是编译时知道的,我可以很容易地使用groupBy函数:

tableQuery.groupBy { r => (r.columnName1,r.columnName2)}.map (case groupName,group) => (groupName._1,groupName._2,group.map(...).avg)}

但是动态呢?

2 个答案:

答案 0 :(得分:1)

您可以使用r.column("foo")语法在运行时动态访问列,因此我相信您可以执行以下操作?

columnNames = List("col1", "col2")
tableQuery
    .groupBy(r => columnNames.map(name => r.column(name)))
    .map({ case (groupName, group) => /* do something with it */})

答案 1 :(得分:0)

要将字符串列名转换为Rep类型,可以使用Slick AST Library。 我有类似的要求,并使用AST Library完成。 你可以参考this code,它做同样的事情。我也遵循相同的代码来解决我的要求。