獲得最高值用下面的查詢刪除行重複和PostgreSQL的
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 | [email protected] | 1
2 | viva_leuschke0 | [email protected] | 2
3 | loyce_herman1 | [email protected] | 1
3 | loyce_herman1 | [email protected] | 3
4 | verona_vandervort2 | [email protected] | 1
4 | verona_vandervort2 | [email protected] | 2
4 | verona_vandervort2 | [email protected] | 3
5 | bruen3_ms_hans | [email protected] | 1
5 | bruen3_ms_hans | [email protected] | 2
5 | bruen3_ms_hans | [email protected] | 3
----+---------------------------+-----------------------------------------+------------
的問題是:我怎麼可以調整該查詢返回唯一行,按最高權限值進行篩選?例如:
----+---------------------------+-----------------------------------------+------------
id | username | email | permission
----+---------------------------+-----------------------------------------+------------
2 | viva_leuschke0 | [email protected] | 2
3 | loyce_herman1 | [email protected] | 3
4 | verona_vandervort2 | [email protected] | 3
5 | bruen3_ms_hans | [email protected] | 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
這是做這件事的最好方法嗎?
我想你張貼(有效!)回答您發現爲*答案*和接受它。這是推薦的方式:你可以回答你自己的問題。 –
Hehehehehe ...實際上,我問的是這個問題是否是最好的。 –
好像我錯過了兩件事。您添加的問題和您添加的查詢中的不完善之處。很好,乾淨的問題,順便說一句。 –