我有三个表与结构概述如下:多个选择连接的表与group by?
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
username VARCHAR(255) UNIQUE
);
CREATE TABLE posts (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT REFERENCES users(id) NOT NULL,
category BIGINT REFERENCES categories(id) NOT NULL,
text TEXT NOT NULL
);
CREATE TABLE posts_votes (
user_id BIGINT REFERENCES users(id) NOT NULL,
post_id BIGINT REFERENCES posts(id) NOT NULL
value SMALLINT NOT NULL,
PRIMARY KEY(user_id, post_id)
);
我能够编写一个查询,得到每个岗位,其用户和使用下面的查询其总价值:
SELECT p.id, p.text, u.username, COALESCE(SUM(v.value), 0) AS vote_value
FROM posts p
LEFT JOIN posts_votes v ON p.id=t.post_id
JOIN users u ON p.user_id=u.id
WHERE posts.category=1337
GROUP BY p.id, p.text, u.username
但现在我想返回一个列,返回上述查询中每个post_id n
的结果SELECT COALESCE((SELECT value FROM posts_votes WHERE user_id=1234 AND post_id=n), 0)
。什么是最好的方法来做到这一点?
将价值为USER_ID = 1234和POST_ID独特= N? –
'BIGSERIAL'建议Postgres,所以我删除了MySQL标签。 –