Mysql 根据发生次数返回记录

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,

我在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,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   |