• 分组语句的使用


    1、分组是在SELECT语句的GROUP BY字句中建立的。

      例子:输入:SELECT vend_id, COUNT(*) AS num_prods

            FROM products

            GROUP BY vend_id;

      因为使用了GROUP BY就不用指定要计算和估值的每个组了。系统会自动完成。GROUP BY子句指示MySQL分组数据,然后对每个组而不是整个结果集进行聚集。

    2、GROUP BY的一些规定

    • GROUP BY子句可以包含任意数目的列。这使得能对分组进行嵌套,为数据分组提供更细致的控制。
    • 如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上进行汇总。也就是,在建立分组时,指定的所有列都要一起计算。
    • GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式,不能使用别名。
    • 除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出。
    • 如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将作为一组。
    • GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。

    3、过滤分组

      例子:SELECT cust_id, COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*) >=2;

      用HAVING实现过滤功能,可是为什么不适用WHERE呢?原因就在于,WHERE过滤行,而HAVING过滤分组。HAVING支持所有的WHERE操作符。通俗来讲就是,WHERE在分组前进行过滤,HAVING在分组后进行过滤。

    4、分组和排序的区别

    ORDER BY GROUP BY
    排序产生的输出 分组行。但输出可能不是分组的顺序
    任意列都可以使用(甚至非选择列也可以使用) 只可能使用选择列或表达式列,而且必须使用每个选择列表达式
    不一定需要 如果与聚集函数一起使用列(或表达式),则必须使用

      一般在使用GROUP BY子句时,应该也给出ORDER BY子句。这是保证数据正确排序的唯一方法。

  • 相关阅读:
    生产环境常见的几种JVM异常
    JVM垃圾回收时如何确定垃圾?是否知道什么是GCRoots?
    你平时工作用过的JVM常用基本配置参数有哪些?
    java X参数
    JUC之CAS
    JUC之List集合
    JUC之lock
    JUC之volatile
    BZOJ2132: 圈地计划
    BZOJ3991: [SDOI2015]寻宝游戏
  • 原文地址:https://www.cnblogs.com/xiaoxli/p/9485656.html
Copyright © 2020-2023  润新知