【问题标题】:Query for multiple count values查询多个计数值
【发布时间】:2013-01-14 10:23:01
【问题描述】:
SELECT  cm.commenter_id,
        cm.comment,
        m.id,
        (
            SELECT COUNT(*) AS r_count
            FROM comments
            GROUP BY comments.commenter_id
        ) AS count,
        m.display_name
FROM    comments cm
        INNER JOIN members m
            ON cm.commenter_id = m.id

从这个查询中,我想获得 cmets 数量最多的人的 display_name。任何指导表示赞赏。

【问题讨论】:

    标签: mysql sql select count


    【解决方案1】:
    SELECT  m.id, m.display_name, COUNT(*) totalComments
    FROM    comments cm
            INNER JOIN members m
                ON cm.commenter_id = m.id
    GROUP   BY m.id, m.display_name
    HAVING  COUNT(*) =
        (
            SELECT  COUNT(*) totalCount
            FROM    Comments
            GROUP   BY  commenter_id
            ORDER   BY totalCount DESC
            LIMIT 1
        )
    

    【讨论】:

    • 介意向我解释 HAVING COUNT(*) 行吗?以前从未真正使用过它
    • HAVING COUNT(*) 的作用类似于WHERE 子句。但主要区别在于HAVING 支持聚合函数,就像MAX, MIN, SUM, etc.. 一样,而WHERE 不支持。
    • 谢谢,这也在这个范围内工作,但我应该发布更多它嵌套的查询。现在抛出一个错误
    • 哦,没关系,是我的错误遗漏了列引用。再次感谢@JW。
    【解决方案2】:

    我认为最简单的方法就是对查询进行排序并取第一行:

    SELECT  cm.commenter_id,
            cm.comment,
            m.id,
            (
                SELECT COUNT(*) AS r_count
                FROM comments
                GROUP BY comments.commenter_id
            ) AS count,
            m.display_name
    FROM    comments cm
            INNER JOIN members m
                ON cm.commenter_id = m.id
    order by count desc
    limit 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多