PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Dapatkan semua posting dengan jumlah suara dan jika pengguna saat ini memilih setiap posting

Anda hampir sampai dengan pertanyaan Anda. Cukup gunakan filter klausa untuk mendapatkan penghitungan suara pengguna saat ini

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

Cara lain adalah dengan menggunakan satu lagi join kiri seperti di bawah ini:

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. Postgres pg_dump membuang basis data dalam urutan yang berbeda setiap saat

  2. Cara menggunakan panda untuk melakukan upsert di SqlAlchemy

  3. Kembalikan kumpulan kolom dinamis

  4. Penguncian dan eksekusi bersamaan dari prosedur tersimpan

  5. Mendeklarasikan struktur Tuple dari sebuah record di PL/pgSQL