【问题标题】:SQL Join and Count can't GROUP BY correctly?SQL Join 和 Count 不能正确 GROUP BY?
【发布时间】:2010-10-30 07:15:12
【问题描述】:

假设我想选择我所有博客文章的 ID,然后选择与该博客文章关联的 cmets 的计数,我如何使用 GROUP BY 或 ORDER BY 以便返回的列表按数量排序每个帖子的cmets?

我有这个查询返回数据但不是按照我想要的顺序?更改分组方式没有区别:

SELECT p.ID, count(c.comment_ID) 
FROM wp_posts p, wp_comments c 
WHERE p.ID = c.comment_post_ID 
GROUP BY c.comment_post_ID;

【问题讨论】:

    标签: sql join count group-by


    【解决方案1】:
    SELECT p.ID, count(c.comment_ID) AS [count]
    FROM wp_posts p, wp_comments c 
    WHERE p.ID = c.comment_post_ID 
    GROUP BY c.comment_post_ID;
    ORDER BY [count] DESC
    

    【讨论】:

    • select p.ID, count(c.comment_ID) AS ccount from wp_posts p, wp_cmets c where p.ID = c.comment_post_ID GROUP BY c.comment_ID ORDER BY ccount DESC; ^^ 只是将所有计数返回为 1(它们绝对不是全部 1)..
    【解决方案2】:

    我不熟悉pre-SQL92的语法,所以我会用我熟悉的方式来表达:

    SELECT c.comment_post_ID, COUNT(c.comment_ID)
    FROM wp_comments c
    GROUP BY c.comment_post_ID
    ORDER BY COUNT(c.comment_ID) -- ASC or DESC
    

    您使用的是什么数据库引擎?至少在 SQL Server 中,除非您从帖子表中提取更多数据,否则不需要连接。加入:

    SELECT p.ID, COUNT(c.comment_ID)
    FROM wp_posts p
    JOIN wp_comments c ON c.comment_post_ID = p.ID
    GROUP BY p.ID
    ORDER BY COUNT(c.comment_ID)
    

    【讨论】:

    • 这对我来说真的只是最简单的例子,让我了解 join + count(它是 mysql 5.x)
    • 明白。通过加入扩展了我的答案。
    【解决方案3】:

    cmets表可能没有相关数据,所以请尝试按帖子ID分组,并请学习JOIN语句,很有帮助,效果更好

    SELECT p.ID, count(c.comment_ID) 
    FROM wp_posts p
    LEFT JOIN wp_comments c ON (p.ID = c.comment_post_ID)
    GROUP BY p.ID
    

    我在 SQL 查询过程中也遇到过这种情况 :)

    【讨论】:

      猜你喜欢
      • 2021-04-01
      • 2014-10-22
      • 2020-05-17
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多