sql >> Databáze >  >> RDS >> PostgreSQL

Získejte všechny příspěvky se součtem hlasů a pokud aktuální uživatel hlasoval pro každý příspěvek

Se svým dotazem jste téměř na místě. Stačí použít filter klauzule k získání počtu hlasů aktuálního uživatele

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

Dalším způsobem je použití dalšího levého spojení, jak je uvedeno níže:

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




  1. Funkce spouštění Postgres

  2. Ladění programu, který používá SIGINT s gdb

  3. Je lepší používat více databází s jedním schématem, nebo jednu databázi s více schématy?

  4. Index databáze nerozlišuje malá a velká písmena?