PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Nhận tất cả các bài đăng với tổng số phiếu bầu và nếu người dùng hiện tại đã bỏ phiếu cho mỗi bài đăng

Bạn gần như ở đó với truy vấn của mình. Chỉ cần sử dụng filter mệnh đề để có được số phiếu bầu của người dùng hiện tại

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

Một cách khác là sử dụng thêm một phép nối bên trái như bên dưới:

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. Cygnus-NGSI sẽ không lưu dữ liệu trong PostgreSQL

  2. Làm thế nào để chỉ nhận jsonb của các khóa cụ thể từ postgres?

  3. PostgreSQL - Quartz JDBC-JobStoreTX - getTriggersForJob - ArrayIndexOutOfBoundsException

  4. Cách nhận hệ điều hành máy chủ theo giờ địa phương trong tất cả các phiên bản Postgres

  5. Postgres thiếu lỗi nhập mệnh đề FROM trên truy vấn với mệnh đề WITH