PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Вземете всички публикации със сбор от гласове и дали текущият потребител е гласувал за всяка публикация

Почти стигнахте с вашето запитване. Просто използвайте filter клауза за получаване на броя на гласовете на текущия потребител

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

Друг начин е да използвате още едно ляво съединение, както по-долу:

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

ДЕМО




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres КАТО '...%' не използва индекс

  2. Изпълнение на PostgreSQL CLI (psql) в bash скрипт без подкана за парола?

  3. За да актуализирате няколко недублирани реда наведнъж, като използвате Групиране по

  4. Как да задам парола за 'psql' неинтерактивно?

  5. python manage.py migrate не прави никакви промени в базата данни на postgres