PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Ottieni tutti i post con la somma dei voti e se l'utente corrente ha votato ogni post

Sei quasi arrivato con la tua domanda. Usa semplicemente filter clausola per ottenere il conteggio dei voti dell'utente corrente

SELECT 
    post.postID as postID, 
    post.title as title, 
    post.author as author,
    post.created as created,
    COALESCE(sum(votes.vote), 0) as voteCount, 
    COALESCE(sum(votes.vote) filter (where votes.username= 'username'), 0) as userVote  -- in '' just provide username for current login user
FROM post 
LEFT JOIN votes ON post.postID = votes.postID 
GROUP BY 1,2,3,4 
ORDER BY 5 DESC

Un altro modo è utilizzare un altro join sinistro come di seguito:

SELECT 
    p.postID as postID, 
    p.title as title, 
    p.author as author,
    p.created as created,
    COALESCE(sum(v1.vote), 0) as voteCount, 
    COALESCE(v2.vote , 0) as userVote  -- in '' just provide username for current login user
FROM post p
LEFT JOIN votes v1 ON p.postID = v1.postID 
LEFT JOIN votes v2 on p.postID = v2.postID and v2.username='username'
GROUP BY 1,2,3,4,v2.vote
ORDER BY 5 DESC

DEMO