考虑下表:
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
但是,如果基础分组行的任何满足条件,我希望返回一个额外的列。在这种情况下,当且仅当任何聚合行具有给定的user_id(在此示例中为user_id 351501)时,voted
列应为true:
comment_id | sum | voted
------------+-----+-------
79507 | 3 | t
79544 | 4 | f
79545 | 1 | t
我看到了一个可能的解决方案,通过将表连接到自身,但这似乎是一个黑客,似乎非常低效。我遇到了窗口函数,不确定它们是否适用于这个问题。
答案 0 :(得分: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;