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

我看到了一个可能的解决方案,通过 JOINing table 本身,但这似乎是一种 hack,而且效率很低。我遇到了窗口函数,不确定它们是否适用于这个问题。

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 回答