【发布时间】:2012-12-16 02:59:06
【问题描述】:
使用以下查询
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
这是最好的方法吗?
【问题讨论】:
-
我想您将找到的(有效!)答案发布为 answer 并接受。这是推荐的方式:您可以回答自己的问题。
-
呵呵呵呵呵呵...实际上,我是在问这个查询是不是最适合这项工作。
-
好像我错过了两件事。您添加的问题和添加的查询中的不完美之处。不错,干净的问题,顺便说一句。
标签: sql postgresql distinct inner-join greatest-n-per-group