按计数分组

问题描述 投票:0回答:1

假设我有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, orgname, users.) } }.result
    }
scala slick
1个回答
0
投票

您只需添加.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
    }
© www.soinside.com 2019 - 2024. All rights reserved.