3

次の表を検討してください。

 comment_id | vote | user_id 
------------+------+---------
      79507 |    1 |  351501
      79507 |    2 |  533594
      79544 |    1 |  648703
      79544 |    1 |  533594
      79544 |    2 |  790789
      79545 |    1 |  351501

voteこの集計クエリは、すべての列の合計を返しますcomment_id

SELECT comment_id, SUM(vote_up) 
FROM votes 
GROUP BY comment_id 
ORDER BY comment_id;

 comment_id | sum 
------------+-----
      79507 |   3
      79544 |   4
      79545 |   1

ただし、基になるグループ化された行のいずれかが条件を満たす場合は、追加の列が返されるようにしたいと考えています。この場合、voted集計された行のいずれかに特定の user_id (この例では user_id 351501) がある場合に限り、列は true になります。

 comment_id | sum | voted
------------+-----+-------
      79507 |   3 |     t
      79544 |   4 |     f
      79545 |   1 |     t

テーブル自体をJOINすることで解決策が考えられますが、それはハックのようで、非常に非効率的です。ウィンドウ関数に出くわしましたが、この問題に当てはまるかどうかわかりません。

4

1 に答える 1

5

集計関数を使用しますbool_or()

SELECT comment_id, SUM(vote_up) AS sume_vote
      ,bool_or(user_id = 351501) AS voted
FROM   votes
GROUP  BY 1
ORDER  BY 1;
于 2013-05-28T21:54:05.407 に答える