美文网首页
GROUP BY 与 HAVING

GROUP BY 与 HAVING

作者: 一江碎月 | 来源:发表于2017-11-30 11:49 被阅读0次

    GROUP BY

    将数据按某些列进行逻辑分组

    1. GROUP BY 位于 WHERE 子句之后,ORDER BY 子句之前。

    2. 除常用的计算函数外(COUNT,MAX,MIN,AVG,SUM),SELECT 中的列必须都出现在 GROUP BY 中

      • 虽然可以写不出现在 GROUP BY 中的列,而且也可以执行操作,但得到的结果往往有问题。
    3. 如果分组列中包含 NULL 值的行,则 NULL 将会做为一个单独的分组返回;如果有多个 NULL 值行,它们将会成为一组。

    SELECT count(*),ArtistId FROM albums GROUP BY ArtistId;
    

    其中 COUNT 是计算函数,ArtistId 是出现在 GROUP BY 子句中。

    该语句会按照 ArtistId 进行分组,并对每一组进行 count 计算 —— 这里并不是对所有的表进行计算,而只是依次对分组进行计算。


    HAVING

    对分组进行过滤。

    使用 HAVING 对分组进行过滤,淘汰不需要的分组。

    SELECT count(*) AS c,ArtistId FROM albums GROUP BY ArtistId HAVING c > 10;
    

    该语句会淘汰总数不大于 10 的所有分组。

    与 WHERE 比较

    1. 两者语法完全相同。

    2. WHERE 对行进行过滤,而 HAVING 对分组进行过滤。

    3. WHERE 在分组前进行过滤,被过滤掉的行不会出现在任何分组中;而HAVING 在分组后对分组进行过滤,用于淘汰某些不需要的分组。

    4. WHERE 会首先排除一部分行,会对 HAVING 产生影响。

    相关文章

      网友评论

          本文标题:GROUP BY 与 HAVING

          本文链接:https://www.haomeiwen.com/subject/cenmbxtx.html