Гладкая группа по количеству - PullRequest
0 голосов
/ 06 ноября 2019

Допустим, у меня есть 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
    }

1 Ответ

0 голосов
/ 15 ноября 2019

Вы можете просто добавить .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
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...