【问题标题】:Issue counting joined rows from two tables对两个表中的连接行进行计数
【发布时间】:2017-10-02 09:05:39
【问题描述】:

我的架构、查询和有问题的结果可以在这里看到: http://sqlfiddle.com/#!17/55bc3/5/0

我创建了一个用于存储帖子、cmets 和收藏夹的架构。 (为了演示,我简化了我的示例)。我正在尝试编写一个查询来汇总每个帖子的喜欢/收藏计数,以显示在“首页”上。

为了模拟用户/帖子/收藏夹之间的关系,我使用了多个交集表。在查询中,我使用两个LEFT JOINs,然后在结果中使用COUNTing 不同的列。我遇到了一个问题,我存储为comment_countCOUNT 在返回大于0 的任何值时会覆盖favourite_count,导致它为两列返回重复值。

认为我理解这背后的机制,即结果的GROUPing 导致结果行被挤压在一起以产生不正确的结果。我想知道是否有人可以让我知道这称为什么背后的一些理论,以及如何正确编写查询来处理这种情况。

【问题讨论】:

    标签: sql postgresql join count schema


    【解决方案1】:

    由于它们是不相关的表,您可以单独计数然后加入。

    SELECT p.id
    ,coalesce(c.comment_count,0) as comment_count
    ,coalesce(f.favorite_count,0) as favorite_count
    FROM post p
    LEFT JOIN (select post_id,count(*) as comment_count 
               from comment group by post_id) c ON c.post_id=p.id
    LEFT JOIN (select post_id,count(*) as favorite_count 
               from favourite group by post_id) f ON f.post_id=p.id
    

    【讨论】:

    • 感谢您的解决方案!在这个例子中我一直在避免子查询,因为被警告它们对性能有负面影响,但这似乎很好地进行了基准测试。我想我会选择你的解决方案。感谢回复!我想我不应该过早地优化!
    猜你喜欢
    • 2017-03-21
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多