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
    

    もう1つの方法は、以下のようにもう1つの左結合を使用することです。

    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. postgresqlセッション/接続を強制終了します

    2. mysqlで最初に起こったこと:joinまたはwhere

    3. 部分インデックスまたはフィルター処理されたインデックスのmysqlでの回避策?

    4. コレクションにパラメータ@Nameが見つかりません