sql - 如何循环一个外键得到一个循环的元素列表?

sql - how to cycle a foreign key to obtain a cycled list of elements?

我有那些表:

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

CREATE TABLE posts (
    id SERIAL PRIMARY KEY,
    title VARCHAR(100) NOT NULL,
    body TEXT NOT NULL,
    user_id INT NOT NULL REFERENCES users(id)
);

请记住,我有超过 5 个用户,每个用户的帖子都超过 100 个,我想获得一个循环响应,不要重复同一用户两次:

+---------+---------+
| id      | user_id |
+---------+---------+
| 1       | 1       |
| 23      | 2       |
| 12      | 3       |
| 50      | 4       |
| 25      | 5       |
| 23      | 1       |
| 22      | 2       |
| 77      | 3       |
...

想法是 user_id 列循环不要重复相同的值两次,有什么想法吗?

分别对每个user_id使用row_number(),并用它来确定结果的顺序:

select id, user_id
from (
    select *, row_number() over (partition by user_id order by id) rn
    from posts
    ) s
order by rn, user_id;