无聚合的Scala Slick groupBy

无聚合的Scala Slick groupBy,scala,group-by,slick,slick-3.0,Scala,Group By,Slick,Slick 3.0,我正在尝试执行一个基本查询,从一个表中生成3列,按cityName(类型为string)分组,但是我无法找到处理映射的正确方法。文档建议,无论是否需要聚合,都必须映射从groupBy返回的结果。在本例中,它是按字符串值分组的,因此在SQL中编写时,它将非常简单: SELECT cityCode, cityName, countryName FROM airport GROUP BY cityCode 到目前为止,我得到的是以下查询,它返回Future[Seq[(String,String,St

我正在尝试执行一个基本查询,从一个表中生成3列,按
cityName
(类型为string)分组,但是我无法找到处理映射的正确方法。文档建议,无论是否需要聚合,都必须映射从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)
这将导致以下错误:

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(u.\u 1)
上,但是,由于这是一个字符串列,我尝试对其进行分组,因此肯定不需要这样做。如果您能深入了解有关字符串列的简单groupBy的正确方法,我们将不胜感激。

您是否尝试过SQL语句是否有效?因为GROUPBY语句中未包含的afaik列需要使用聚合函数,如AVG、MAX等。。所以我的第一个猜测是,这个SQL语句甚至是无效的,因为它需要从cityCode返回某种映射到cityName和countryName的列表(顺便说一句,slick语句也是如此)。也许你可以写下你期望的结果。我认为这将有助于回答您的问题。IIRC MySQL支持这种奇怪的分组方式,但它并没有得到普遍支持。我想您应该使用DISTINCT。您是否尝试过SQL语句是否有效?因为GROUPBY语句中未包含的afaik列需要使用聚合函数,如AVG、MAX等。。所以我的第一个猜测是,这个SQL语句甚至是无效的,因为它需要从cityCode返回某种映射到cityName和countryName的列表(顺便说一句,slick语句也是如此)。也许你可以写下你期望的结果。我认为这将有助于回答您的问题。IIRC MySQL支持这种奇怪的分组方式,但它并没有得到普遍支持。我想你应该用DISTINCT来代替。
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]