首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何按子查询对列表进行排序?

如何按子查询对列表进行排序?
EN

Stack Overflow用户
提问于 2020-05-01 16:44:53
回答 1查看 33关注 0票数 0

我想要根据成员对团队数据进行排序,我已经用下面的方式编写了sql,我不确定我如何才能根据members.Please的数量进行排序,你们可以帮助我。

代码语言:javascript
复制
SELECT
    t.name,
    t.description,
    ARRAY (
        SELECT
            json_build_object('id', tm.id, 'owner', tm.owner, 'person', json_build_object('id', p.id, 'name', p.name, 'email', p.email))
        FROM
            membership tm
            INNER JOIN person p ON p.id = tm.personId
        WHERE
            tm.teamid = t.id) AS membership
    FROM
        team AS t
    WHERE
        t.id = 1;

所以上面的代码给出了下面的数据

代码语言:javascript
复制
 [
  {
    id: 1,
    name: 'Coco cola',
    description: 'drink',
    membership: [{
      id: 12,
      owner: false,
      person: {
        name: 'john deo',
        'email': 'email@hotmail.com'
      }
    }, {
      id: 122,
      owner: false,
      person: {
        name: 'peter deo',
        'email': 'peter@hotmail.com'
      }
    }]
  }, {
    id: 2,
    name: 'fanta',
    description: 'drink',
    membership: [{
      id: 13,
      owner: false,
      person: {
        name: 'rose',
        'email': 'rose@hotmail.com'
      }
    }, {
      id: 172,
      owner: false,
      person: {
        name: 'david',
        'email': 'david@hotmail.com'
      }
    }]
  }
 ]

我的表格是:

代码语言:javascript
复制
team (id, name, description)
membership (id, owner, teamId, personId )
person (id, name, email)

我想要做的是根据成员数量对团队进行排序。

EN

回答 1

Stack Overflow用户

发布于 2020-05-01 19:56:48

只需向外部查询添加一个ORDER BY即可。在本例中,我将使用相关子查询:

代码语言:javascript
复制
SELECT t.name, t.description,
       (SELECT ARRAY_AGG(json_build_object('id', tm.id, 'owner', tm.owner, 'person',
                                           json_build_object('id', p.id, 'name', p.name, 'email', p.email)
                                          )
                        )
        FROM membership tm JOIN
             person p
             ON p.id = tm.personId
        WHERE tm.teamid = t.id
      ) membership
FROM team t
WHERE a.id = 1  -- this is invalid because `a` does not refer to anything
ORDER BY (SELECT COUNT(*) FROM membership tm WHERE tm.teamid = t.id) DESC;

我碰巧使用ARRAY_AGG()而不是使用子查询的ARRAY()来编写这段代码。它认为它们是等价的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61539308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档