To get 2 rows from each group I can use `ROW_NUMBER()` with condition `<= 2` at last but my question is what If I want to get different limits on each group e.g 3 rows for section\_id 1, 1 rows for 2 and 1 rows for 3?

Given the following table:

```
db=# SELECT * FROM xxx;
 id | section_id | name
----+------------+------
  1 |          1 | A
  2 |          1 | B
  3 |          1 | C
  4 |          1 | D
  5 |          2 | E
  6 |          2 | F
  7 |          3 | G
  8 |          2 | H
(8 rows)

```

I get the first 2 rows (ordered by **name**) for each **section\_id**, i.e. a result similar to:

```
 id | section_id | name
----+------------+------
  1 |          1 | A
  2 |          1 | B
  5 |          2 | E
  6 |          2 | F
  7 |          3 | G
(5 rows)

```

**Current Query:**

```
SELECT
  * 
FROM (
  SELECT
    ROW_NUMBER() OVER (PARTITION BY section_id ORDER BY name) AS r,
    t.*
  FROM
    xxx t) x
WHERE
  x.r <= 2;

```