PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Uzyskaj wszystkie posty z sumą głosów i jeśli bieżący użytkownik głosował na każdy post

Jesteś prawie na miejscu ze swoim zapytaniem. Po prostu użyj filter klauzula, aby uzyskać liczbę głosów bieżącego użytkownika

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

Innym sposobem jest użycie jeszcze jednego lewego sprzężenia, jak poniżej:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nazwa bazy danych postgresql Heroku

  2. Tworzenie i usuwanie bazy danych PostgreSQL na Ubuntu 16.04

  3. Optymalizacja zapytań w PostgreSQL. WYJAŚNIJ podstawy – część 1

  4. Jak ustawić domyślne hasło użytkownika w PostgreSQL?

  5. Znajdź rodzica rekurencyjnie za pomocą Query