使用以下查询
SELECT
users.id,
users.username,
users.email,
groups.permission
FROM users
INNER JOIN memberships ON users.id = memberships.user_id
INNER JOIN groups ON memberships.group_id = groups.id
INNER JOIN groupings ON groups.id = groupings.group_id
WHERE groupings.repo_id = 1
GROUP BY users.id, groups.permission
ORDER BY users.id
我得到以下行:
----+---------------------------+-----------------------------------------+------------
id | username | email | permission
----+---------------------------+-----------------------------------------+------------
2 | viva_leuschke0 | viva_leuschke0@ritchiealtenwerth.org | 1
2 | viva_leuschke0 | viva_leuschke0@ritchiealtenwerth.org | 2
3 | loyce_herman1 | herman1.loyce@bednar.com | 1
3 | loyce_herman1 | herman1.loyce@bednar.com | 3
4 | verona_vandervort2 | verona.vandervort2@mante.biz | 1
4 | verona_vandervort2 | verona.vandervort2@mante.biz | 2
4 | verona_vandervort2 | verona.vandervort2@mante.biz | 3
5 | bruen3_ms_hans | ms.bruen3.hans@bechtelar.net | 1
5 | bruen3_ms_hans | ms.bruen3.hans@bechtelar.net | 2
5 | bruen3_ms_hans | ms.bruen3.hans@bechtelar.net | 3
----+---------------------------+-----------------------------------------+------------
问题是:如何调整此查询以返回唯一行,按最高权限值过滤?就像是:
----+---------------------------+-----------------------------------------+------------
id | username | email | permission
----+---------------------------+-----------------------------------------+------------
2 | viva_leuschke0 | viva_leuschke0@ritchiealtenwerth.org | 2
3 | loyce_herman1 | herman1.loyce@bednar.com | 3
4 | verona_vandervort2 | verona.vandervort2@mante.biz | 3
5 | bruen3_ms_hans | ms.bruen3.hans@bechtelar.net | 3
----+---------------------------+-----------------------------------------+------------
我正在使用 PostgreSQL 9.1。
更新:通过使用该DISTINCT ON
子句,我能够得到我想要的。
SELECT DISTINCT ON(users.id)
users.id,
users.username,
users.email,
groups.permission
FROM users
INNER JOIN memberships ON users.id = memberships.user_id
INNER JOIN groups ON memberships.group_id = groups.id
INNER JOIN groupings ON groups.id = groupings.group_id
WHERE groupings.repo_id = 1
GROUP BY users.id, groups.permission
ORDER BY
users.id ASC,
groups.permission DESC
这是最好的方法吗?