zoukankan      html  css  js  c++  java
  • 分组语句的使用

    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子句。这是保证数据正确排序的唯一方法。

  • 相关阅读:
    记: Spring Data Jpa @OneToMany 级联查询被动触发的问题
    后端小白的Bootstrap笔记
    最短路径问题
    深度优先搜索 & 广度优先搜索
    检讨书板子
    关于计时器
    博客园美化
    P4819 杀人游戏 (图论 )
    水站 (二分)
    对拍
  • 原文地址:https://www.cnblogs.com/xiaoxli/p/9485656.html
Copyright © 2011-2022 走看看