sql >> Databasteknik >  >> RDS >> PostgreSQL

Få alla inlägg med summan av röster och om nuvarande användare röstade varje inlägg

Du är nästan där med din fråga. Använd bara filter klausul för att få aktuell användares rösträkning

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

Ett annat sätt är att använda ytterligare en vänsteranslutning som nedan:

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. Hur går jag igenom en MySQL-fråga via PDO i PHP?

  2. validering på e-post/postnummerfält i sql/oracle

  3. ProgrammingError:syntaxfel vid eller nära när en fråga körs i python med psycopg2

  4. Google Cloud SQL är nu skrivskyddad