按计数分组

假设我有organization个,每个组织有不同的group个,并且user个订阅了组。

case class OrganizationEntity(id: Option[Int],name: String)

case class GroupEntity(id: Option[Int],organizationId: Int,name: String)

case class GroupUserEntity(groupId: Int,userId: Int)

我需要获取一个组织的所有组,并具有organizationName和订阅该组的用户数量。

在SQL中,可以通过以下查询轻松完成此操作:

SELECT g.*,o.organizationname,COUNT(DISTINCT gu.userid) FROM `group` g
              LEFT JOIN organization o ON g.orgid = o.organizationid
              LEFT JOIN group_user gu ON g.groupid = gu.groupid
              WHERE g.orgid = 1234
              GROUP BY g.groupid;

但是我正在努力地以光滑的方式复制它,

我已经开始写这篇文章了,但是现在我被困住了:

def findByOrganizationId(organizationId: Int) = {
      (for {
        g <- groups if g.organizationId === organizationId
        o <- organizations if o.id === organizationId
        gu <- groupUsers if g.id === gu.groupid
      } yield (g,o.name,gu)).groupBy(_._3.groupid).map { case (_,values) => (values.map { case (g,orgname,users) => (g,users.) } }.result
    }
h1k2l3 回答:按计数分组

您只需添加.length即可在您的代码中进行计数。

我认为也应该直接产生收益,因此您不需要groupBy

def findByOrganizationId(organizationId: Int) = {
      (for {
        g <- groups if g.organizationId === organizationId
        o <- organizations if o.id === organizationId
        gu <- groupUsers if g.id === gu.groupid
      } yield (g,o.name,gu.length)).result
    }
本文链接:https://www.f2er.com/3156017.html

大家都在问