Mysql 根据发生次数返回记录
我在db表“fb_list”中有以下记录,我想查询它,以便检索“Assoc”计数按秩顺序小于4的所有记录Mysql 根据发生次数返回记录,mysql,Mysql,我在db表“fb_list”中有以下记录,我想查询它,以便检索“Assoc”计数按秩顺序小于4的所有记录 Rank Name Assoc 1 PLAYER1 CHN 2 PLAYER2 CHN 3 PLAYER3 CHN 4 PLAYER4 CHN 5 PLAYER5 JPN 6 PLAYER6 BRA 7 PLAYER7 TPE 8 PLAYER8 CHN 9 PLAYER9 SWE 10 PLAYER10 GER 预期结果应返回记录1-3,
Rank Name Assoc
1 PLAYER1 CHN
2 PLAYER2 CHN
3 PLAYER3 CHN
4 PLAYER4 CHN
5 PLAYER5 JPN
6 PLAYER6 BRA
7 PLAYER7 TPE
8 PLAYER8 CHN
9 PLAYER9 SWE
10 PLAYER10 GER
预期结果应返回记录1-3,5-7,9,10
谢谢。对于MySql 8.0+,具有
行号()
窗口功能:
select t.`rank`, t.name, t.assoc
from (
select *, row_number() over (partition by assoc order by `rank`) rn
from fb_list
) t
where t.rn < 4
这适用于MySQL 8.0+,但早期版本有什么功能吗?谢谢。见我的第二个问题。
select t.`rank`, t.name, t.assoc
from fb_list t
where (select count(*) from fb_list where assoc = t.assoc and `rank` < t.rank) < 3
| rank | name | assoc |
| ---- | -------- | ----- |
| 1 | PLAYER1 | CHN |
| 2 | PLAYER2 | CHN |
| 3 | PLAYER3 | CHN |
| 5 | PLAYER5 | JPN |
| 6 | PLAYER6 | BRA |
| 7 | PLAYER7 | TPE |
| 9 | PLAYER9 | SWE |
| 10 | PLAYER10 | GER |