组函数针对的是指定字段的非空值。注意:where子句中不能出现组函数!!!

avg()    平均值(只能针对数值型 )
max()    最大值(不限制类型)
min()    最小值(不限制类型)
count()    计数(针对记录数目,即行数)
stddev()    方差(只能针对数值型)
sum()    求和(只能针对数值型)
 
前提:person表
  1. id namedept_idsalarymanager_id
  2. 0001wangda101 8500[NULL]
  3. 0002wanger1033 000 0009
  4. 0003wangsan102 4000 0006
  5. 0004wangsi104 2000 0005
  6. 0005wangwu104 6000 0001
  7. 0006wangliu102 7000 0001
  8. 0007wangqi105 5000 0008
  9. 0008wangba105 5500 0001
  10. 0009wangjiu103 6000 0001
  11. 0010wangshi104 900 0005
  12. 0011wangsy103 5000 0009
  13. 0012wangse[NULL]3000[NULL]
 
group by    排序(可以有一个或者多个字段)
功能:按照部门查询各部门的平均工资
  1. SELECT
  2. dept_id,
  3. avg(salary)
  4. FROM
  5. person
  6. GROUP BY
  7. dept_id;
结果:
  1. dept_idavg(salary)
  2. [NULL]3000.000000
  3. 101 8500.000000
  4. 102 5500.000000
  5. 103 4666.666667
  6. 104 2966.666667
  7. 105 5250.000000
HAVING    在查询条件中含有组函数时,用来替代WHERE(注意:在mysql中,having只能放在group by的后面!)
功能:查询部门平均工资高于5000的部门名称(dept表)、部门平均工资(person表,组函数)
  1. SELECT
  2. p.dept_id,
  3. dept_name,
  4. avg(salary)
  5. FROM
  6. person p,dept d
  7. where p.dept_id = d.dept_id
  8. GROUP BY
  9. p.dept_id
  10. HAVING
  11. avg(salary)>5000;
结果:
  1. dept_iddept_nameavg(salary)
  2. 101 zongwu 8500.000000
  3. 102 zhenggong5500.000000
  4. 105 renshi 5250.000000
 
 
05-11 18:27