当前位置:首页 > 数据库 > mysql数据库的GROUP BY详解

mysql数据库的GROUP BY详解

6个月前 (05-26)72
group by 用法解析
group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。
SELECT子句中的列名必须为分组列或列函数。列函数对于GROUP BY子句定义的每个组各返回一个结果。
某个员工信息表结构和数据如下:
  id  name  dept  salary  edlevel  hiredate 
      1 张三 开发部 2000 3 2009-10-11
      2 李四 开发部 2500 3 2009-10-01
      3 王五 设计部 2600 5 2010-10-02
      4 王六 设计部 2300 4 2010-10-03
      5 马七 设计部 2100 4 2010-10-06
      6 赵八 销售部 3000 5 2010-10-05
      7 钱九 销售部 3100 7 2010-10-07
      8 孙十 销售部 3500 7 2010-10-06 
例如,我想列出每个部门最高薪水的结果,sql语句如下:
SELECT DEPT, MAX(SALARY) AS MAXIMUM
FROM STAFF
GROUP BY DEPT
查询结果如下:
      DEPT  MAXIMUM 
      开发部 2500
      设计部 2600
      销售部 3500
解释一下这个结果:
1、满足“SELECT子句中的列名必须为分组列或列函数”,因为SELECT有GROUP BY DEPT中包含的列DEPT。
2、“列函数对于GROUP BY子句定义的每个组各返回一个结果”,根据部门分组,对每个部门返回一个结果,就是每个部门的最高薪水。
注意:计算的是每个部门(由 GROUP BY 子句定义的组)而不是整个公司的 MAX(SALARY)。
例如,查询每个部门的总的薪水数
SELECT DEPT, sum( SALARY ) AS total
FROM STAFF
GROUP BY DEPT
查询结果如下:
DEPT  total 
开发部 4500
设计部 7000
销售部 9600
将 WHERE 子句与 GROUP BY 子句一起使用
分组查询可以在形成组和计算列函数之前具有消除非限定行的标准 WHERE 子句。必须在GROUP BY 子句之前指定 WHERE 子句。
例如,查询公司2010年入职的各个部门每个级别里的最高薪水
SELECT DEPT, EDLEVEL, MAX( SALARY ) AS MAXIMUM
FROM staff
WHERE HIREDATE > '2010-01-01'
GROUP BY DEPT, EDLEVEL
ORDER BY DEPT, EDLEVEL
查询结果如下:
  DEPT  EDLEVEL  MAXIMUM 
      设计部 4 2300
      设计部 5 2600
      销售部 5 3000
      销售部 7 3500
注意:在SELECT语句中指定的每个列名也在GROUP BY子句中提到。未在这两个地方提到的列名将产生错误。
GROUP BY子句对DEPT和EDLEVEL的每个唯一组合各返回一行。
在GROUP BY子句之后使用HAVING子句
可应用限定条件进行分组,以便系统仅对满足条件的组返回结果。为此,在GROUP BY子句后面包含一个HAVING子句。HAVING子句可包含一个或多个用AND和OR连接的谓词。每个谓词将组特性(如AVG(SALARY))与下列之一进行比较:
例如:寻找雇员数超过2个的部门的最高和最低薪水:
SELECT DEPT, MAX( SALARY ) AS MAXIMUM, MIN( SALARY ) AS MINIMUM
FROM staff
GROUP BY DEPT
HAVING COUNT( * ) >2
ORDER BY DEPT
查询结果如下:
  DEPT  MAXIMUM  MINIMUM 
      设计部 2600 2100
      销售部 3500 3000
例如:寻找雇员平均工资大于3000的部门的最高和最低薪水:
SELECT DEPT, MAX( SALARY ) AS MAXIMUM, MIN( SALARY ) AS MINIMUM
FROM staff
GROUP BY DEPT
HAVING AVG( SALARY ) >3000
ORDER BY DEPT
查询结果如下:
  DEPT  MAXIMUM  MINIMUM 
      销售部 3500 3000
 
  
转载地址:http://blog.csdn.net/xxpyeippx/article/details/8059910

作者:dmfrm
来源链接:https://blog.csdn.net/u010889616/article/details/48298789

标签: group by

“mysql数据库的GROUP BY详解” 的相关文章

SQL数据库——分组查询GROUP BY

SQL数据库——分组查询GROUP BY

一、分组查询GROUP BY 1.语法 SELECT (列名) as '自由命名' , COUNT(*) as '自由...

MySQL8.0新特性--Group by

相同点: (1)去掉重复值:根据group by后面的关键字只显示一行结果; (2)默认开启参数ONLY_FULL_GROUP_BY,表示完全...

mysql中 WHERE 和GROUP BY 的联合使用

where group by联合使用  select 列a,聚合函数 from 表名 where 过滤条件 group by 列a having...

mysql group by(小白可看,非常基础和详细,有举例)

mysql group by(小白可看,非常基础和详细,有举例)

语句本质: group by的本质就是将某些列分组,将分组后的每组数据进行函数运算,如sum、max、avg、count等,得出每组最终结果; 展示:1)所有分组...

MySQL中的group by的使用总结

MySQL中的group by的使用总结

个人理解 在使用数据库查询语句时经常会有分组的应用场景,这时就要用到group by关键字,比如,想在一张学生表中查询年龄最大的男生和女生。个...

mysql5.7以上版本 GROUP BY的使用

在把MySQL升级到5.7或者更高的版本,一些以前看上去不会出错的group by 操作在这个版本以后就会出现语法报错的情况: [Err] 1...

Spark Sql 与 MySql 使用 group by 的差别

刚学Spark sql,今天在使用过程中遇到一个小问题。来分享一下。 在 navicat 中使用 group by 相关语句并没出错,但是在 squirrel sql...

MySQL使用group by分组时报错

MySQL使用group by分组时报错

文章目录 MySQL使用group by分组时报错 #1 环境 #...

MySql分组函数-Group by与having理解

MySql分组函数-Group by与having理解 注意:select 后的字段,必须要么包含在group by中,要么包含在having 后的聚合函数里。...

MySQL:先进行子查询排序再group by,但排序失效问题的解决办法

问题描述 使用如下sql,先在子查询中进行order b...