我想要根据成员对团队数据进行排序,我已经用下面的方式编写了sql,我不确定我如何才能根据members.Please的数量进行排序,你们可以帮助我。
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;所以上面的代码给出了下面的数据
[
{
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'
}
}]
}
]我的表格是:
team (id, name, description)
membership (id, owner, teamId, personId )
person (id, name, email)我想要做的是根据成员数量对团队进行排序。
发布于 2020-05-01 19:56:48
只需向外部查询添加一个ORDER BY即可。在本例中,我将使用相关子查询:
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()来编写这段代码。它认为它们是等价的。
https://stackoverflow.com/questions/61539308
复制相似问题