我正在尝试执行一个基本查询,从一个表中生成3列,按cityName
(类型为字符串)分组,但是我无法找到正确的方法来处理映射。文档建议必须映射从groupBy返回的结果,无论它是否需要聚合。在这种情况下,它按字符串值进行分组,因此在SQL中编写它时,它将非常简单:
SELECT cityCode, cityName, countryName FROM airport GROUP BY cityCode
我到目前为止的是以下查询,它返回Future[Seq[(String, String, String)]]
:
val q = for {
a <- slickAirports
} yield (a.cityCode, a.cityName, a.cityName)
db.run(q.result)
我尝试按cityCode
按照此处的示例进行分组:http://slick.typesafe.com/doc/3.0.3/sql-to-slick.html#group-by
val q2 = q.groupBy(a => a._1).map{
case (cityCode, group) => (cityCode, group.map(_._1))
}
db.run(q2.result)
导致以下错误:
type mismatch;
found : AirportDAOImpl.this.driver.StreamingDriverAction[Seq[(String, Option[String])],(String, Option[String]),slick.dbio.Effect.Read]
(which expands to) slick.profile.FixedSqlStreamingAction[Seq[(String, Option[String])],(String, Option[String]),slick.dbio.Effect.Read]
required: slick.dbio.DBIOAction[Seq[(String, String, String)],slick.dbio.NoStream,Nothing]
我能看到的唯一不同的是我在.avg
上不包括group.map(_._1)
,但是因为这是一个字符串列,我试图分组,肯定不会需要这个。任何关于简单的groupBy字符串列的正确方法的见解将不胜感激。