如何对给定 table 的 sql 数据进行排序?

how to sort sql data for given table?

+---------+----------------+--------+
|   aid   |       fn       | col_no |
+---------+----------------+--------+
| 2011768 | ABDUL          |      5 |
| 2011499 | ABDULLA        |      4 |
| 2011198 | ADNAN          |      3 |
| 2011590 | AKSHAYA PRAISY |      2 |
| 2011749 | AMIR           |      1 |
| 2011213 | AMOGHA         |      5 |
| 2011027 | ANU            |      4 |
| 2011046 | ANUDEV D       |      3 |
| 2011435 | B S SAHANA     |      2 |
| 2011112 | BENAKA         |      1 |
+---------+----------------+--------+

如何将 col_no 之类的数字排序为 1 2 3 4 5 并再次重复为 1 2 3 4 5?

我需要这样的输出

+---------+----------------+--------+
|   aid   |       fn       | col_no |
+---------+----------------+--------+
| 2011749 | AMIR           |      1 |
| 2011590 | AKSHAYA PRAISY |      2 |
| 2011198 | ADNAN          |      3 |
| 2011499 | ABDULLA        |      4 |
| 2011768 | ABDUL          |      5 |
| 2011112 | BENAKA         |      1 |
| 2011435 | B S SAHANA     |      2 |
| 2011046 | ANUDEV D       |      3 |
| 2011027 | ANU            |      4 |
| 2011213 | AMOGHA         |      5 |
+---------+----------------+--------+ 

您可以使用 row_number() 分区 col_no:

select t.*
from t
order by row_number() over (partition by col_no order by fn),
         col_no;

Here 是一个 db<>fiddle.