zoukankan      html  css  js  c++  java
  • SQL分组查询

     实际应用中,我们经常需要做一些数据统计,将表的全部数据划分为几组数据,每组数据统计出一个结果。这种功能可以使用分组函数(多行函数、集合函数)来实现。

        在Mysql数据库中,通过GROUP BY子句将分组的依据加入到查询语句中,并可使用HAVING子句进一步限制查询结果。主要有COUNT/AVG/SUM/MAX/MIN等几个分组函数。

     COUNT:  COUNT函数用来计算表中的总记录条数。

    AVG、SUM:AVG、SUM这两个函数用来统计列或表达式的平均值和和值。

    MAX、MIN:这两个函数用来获取列或表达式的最大值、最小值,可以用来统计任何数据类型。

    要把数据表划分为一个一个小组,需要使用GROUP BY子句,把需要进行分组的列放在这个子句后面,如果需要进一步限制分组后的结果,需要使用HAVING子句。使用语法如下    

    SELECT <*,column [alias],...> FROM table

           [WHERE condition(s)]

           [GROUP BY group_by_expression]

           [HAVING group_condition ]

           [ORDER BY column[ASC|DESC]];

    单列分组: 即分组的依据是一个列

    多列分组:即分组的依据是多个列

      SELECT email,desiredState,max( createTime) ss from ali_edas_app GROUP BY email,desiredState;

    使用HAVING子句用来对分组后的结果进一步限制。如将平均薪水不小于3000才被显示出来:

    注意:

    • AVG、SUM这两个函数只能用来操作数字。
    • MAX、MIN、AVG、SUM等函数在计算时会自动忽略NULL值。
    • 分组函数只能出现在SELECT列表、HAVING子句和ORDER BY子句中,不能出现在WHERE子句中。
    • 如果要限制分组结果,只能使用HAVING子句。
    • 使用分组函数时,出现在SELECT列表中的字段,如果只有组函数的字段,那么可以没有GROUP BY子句,如果还有其他的列或者表达式,则这些列和表达式必须出现在GROUP BY子句中(重要  group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面)
    • 出现在GROUP BY 子句中的列,没有出现在SELECT列表中,语法上是可以的。
  • 相关阅读:
    Spring boot unable to determine jdbc url from datasouce
    Unable to create initial connections of pool. spring boot mysql
    spring boot MySQL Public Key Retrieval is not allowed
    spring boot no identifier specified for entity
    Establishing SSL connection without server's identity verification is not recommended
    eclipse unable to start within 45 seconds
    Oracle 数据库,远程访问 ora-12541:TNS:无监听程序
    macOS 下安装tomcat
    在macOS 上添加 JAVA_HOME 环境变量
    Maven2: Missing artifact but jars are in place
  • 原文地址:https://www.cnblogs.com/hym-pcitc/p/5613116.html
Copyright © 2011-2022 走看看