SQL分组查询

Posted 筱筱鹿丸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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列表中,语法上是可以的。

 

以上是关于SQL分组查询的主要内容,如果未能解决你的问题,请参考以下文章

sql多条件分组查询,求sql语句。

SQL查询语句.GroupBy分组

sql分组查询和连接查询

sql连接查询和分组查询

ORACLE分组排序查询

sql多表分组查询并排序的问题