zoukankan      html  css  js  c++  java
  • MySQL基础之分组数据

    分组允许把数据分为多个逻辑组, 以便能对每个组进行聚集计算

    创建分组

    分组是在SELECT语句的GROUP BY子句中建立的。

    MariaDB [crashcourse]> SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY vend_id;
    +---------+-----------+
    | vend_id | num_prods |
    +---------+-----------+
    |    1001 |         3 |
    |    1002 |         2 |
    |    1003 |         7 |
    |    1005 |         2 |
    +---------+-----------+
    4 rows in set (0.001 sec)
    
    MariaDB [crashcourse]> 

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

    在具体使用GROUP BY子句前, 需要知道一些重要的规定

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

    过滤分组

    MySQL允许过滤分组, 规定包括哪些分组、排除哪些分组。

    MySQL使用HAVING来进行过滤分组

    HAVING与WHERE非常相似, 只是WHERE子句过滤的是指定的行而不是分组。事实上, WHERE没有分组的概念。而HAVING可以过滤分组

    MariaDB [crashcourse]> SELECT cust_id, COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*) >=2;
    +---------+--------+
    | cust_id | orders |
    +---------+--------+
    |   10001 |      2 |
    +---------+--------+
    1 row in set (0.002 sec)
    
    MariaDB [crashcourse]> 

    WHERE与HAVING的区别:

    WHERE在数据分组前进行过滤, 而HAVING在数据分组后进行过滤。这是一个重要的区别。WHERE排序的行不包括在分组中, 这可能会改变计算值, 从而影响HAVING子句中基于这些值过滤的分组

    分组和排序

    ORDER BY与GROUP BY之间的差别

    一般在使用GROUP BY子句时, 应该也给出ORDER BY子句

    SELECT子句顺序

    在SELECT子句中必须遵循如下次数

  • 相关阅读:
    几个Tab,滑动门,选项卡,图片切换
    超多的CSS3圆角渐变网页按钮
    B2B(企业对企业)、B2C(企业对个人)、C2C(个人对个人)
    如何获取一个数据库的所有建表语句与创建索引的语句?
    Linux学习笔记(7)CRT实现windows与linux的文件上传下载
    (4.17)sql server中的uuid获取与使用
    【等待优化】SQL SERVER常见等待——解决会话等待产生的系统问题
    sql server迁移数据(文件组之间的互相迁移与 文件组内文件的互相迁移)
    always on 之路实践(未完)
    (4.16)存储过程的加密与解密
  • 原文地址:https://www.cnblogs.com/featherwit/p/13374434.html
Copyright © 2011-2022 走看看