SQL MAX
聚合函數將允許您選擇組中的頂部元素。有沒有辦法爲每個組選擇頂部n
元素?SQL - 在組中選擇'n'最大元素
舉例來說,如果我有這樣舉行了他們的職級劃分,並希望每格頂部兩個用戶的用戶的表...
Users
userId | division | rank
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 2 | 3
我想查詢以某種方式回報用戶2,3 ,4
如果很重要,我使用MySQL。
SQL MAX
聚合函數將允許您選擇組中的頂部元素。有沒有辦法爲每個組選擇頂部n
元素?SQL - 在組中選擇'n'最大元素
舉例來說,如果我有這樣舉行了他們的職級劃分,並希望每格頂部兩個用戶的用戶的表...
Users
userId | division | rank
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 2 | 3
我想查詢以某種方式回報用戶2,3 ,4
如果很重要,我使用MySQL。
SELECT * FROM (
SELECT u1.userid, u1.rank
FROM users u1
GROUP BY u1.division
HAVING u1.rank = MAX(u1.rank)
ORDER BY u1.rank DESC
UNION
SELECT u2.userid, u2.rank
FROM users u2
WHERE u2.id <> u1.id
GROUP BY u2.division
HAVING u2.rank = MAX(u2.rank)
ORDER BY u2.rank DESC
) ranking
ORDER BY ranking.userid
select * from users as t1
where (select count(*) from users as t2
where t1.division = t2.division and t2.rank > t1.rank) <2
order by division,rank
試試這個:
SELECT *
FROM (
SELECT *, row_number() OVER (PARTITION BY division ORDER BY rank DESC) as rn
FROM users
) as extended_users
WHERE rn <= 2
ORDER BY userId
他問的是mysql,而不是mssql。 :) –
其實幾乎所有其他主要的數據庫管理系統都會支持 - 不僅僅是MS-SQL ... –
它適用於PostgreSQL和SQL Server,所以我認爲它也可以在MySQL中使用。對不起,我錯了。 – DavidEG
SELECT * from users u0
WHERE NOT EXISIS (
SELECT * FROM users u1
WHERE u1.division = u0.division
AND u1.rank >= u0.rank +2
);
BTW:大多數人算從零開始行列:人頭位置有秩= 1,第二個得到秩= 2,等等。在這種情況下,你的排名是1+排名前你的人數
我已經添加了[mysql +最大的n-per-group](http://stackoverflow.com/questions/tagged/greatest- n-per-group + mysql?sort = votes&pagesize = 50)tags(你可以按照該鏈接看到類似的問題) –