首页
学习
活动
专区
圈层
工具
发布

group by?
EN

Stack Overflow用户
提问于 2017-02-19 09:57:42
回答 1查看 34关注 0票数 0

我有三个表,结构概述如下:

代码语言:javascript
复制
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)
);

我能够使用下面的查询来组合一个查询,该查询获取每个帖子及其用户及其总价值:

代码语言:javascript
复制
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 nSELECT COALESCE((SELECT value FROM posts_votes WHERE user_id=1234 AND post_id=n), 0)结果。做这件事最好的方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-19 10:18:29

我认为额外的LEFT JOIN是一种合理的方法:

代码语言:javascript
复制
SELECT p.id, p.text, u.username, COALESCE(SUM(v.value), 0) AS vote_value,
       COALESCE(pv.value, 0)
FROM posts p JOIN
     users u
     ON p.user_id=u.id LEFT JOIN
     topics_votes v
     ON p.id = t.post_id LEFT JOIN
     post_votes pv
     ON pv.user_id = 1234 AND pv.post_id = p.id
WHERE p.category = 1337
GROUP BY p.id, p.text, u.username, pv.value;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42322839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档