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;
我有那些表:
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;