使用count,groupBy,如Slick

时间:2013-11-06 18:47:31

标签: slick

如何以最精确,最佳的方式将此sql语句转换为Slick。

select t.*, count(v.userId) as vote from Talk t inner join Vote v on t.id = v.talkId group by t.id

v。 talkId 列是Talk的外键 id

谈话模式:

  • ID
  • 描述
  • speaker_id
  • pledged_date
  • create_date_time
  • locked_date
  • is_approved

投票模型:

  • USER_ID
  • talk_id

我尝试了这个,但它抛出了异常 SlickException:无法在Ref s3中选择Path s2

val x = for {
      t <- models.slick.Talks
      v <- models.slick.Votes if t.id === v.talkId
    } yield (t, Query(models.slick.Votes).filter(_.talkId === t.id).length)

val y = x.groupBy(_._1.id)

1 个答案:

答案 0 :(得分:2)

val x = (for {
  t <- models.slick.Talks
  v <- models.slick.Votes if t.id === v.talkId
} yield (t, v)).groupBy(_._1).map{ case (t,tvs) => (t,tvs.map(_._2).length) }