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

Få alle indlæg med sum af stemmer, og hvis den nuværende bruger har stemt hvert indlæg

Du er der næsten med din forespørgsel. Brug bare filter klausul for at få den aktuelle brugers stemmetal

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

En anden måde er ved at bruge en mere venstre join som nedenfor:

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. Hurtigste måde at læse stor MySQL-tabel i python

  2. Fejl SQL-forespørgsel:Brug SUM-metoden, når #1054 - Ukendt kolonne 'tbl_customers.id' i 'where clause'

  3. Tæl aktive brugere ved hjælp af login-tidsstempel i MySQL

  4. MySQL-forespørgsel åruge i den aktuelle uge for at starte på en torsdag, slutte på onsdag