Mysql统计查询

1、单字段分组查询(group by)

1.1、查询出每个部门的人数:

SELECT
	字段名 AS '部门编号',
	COUNT(字段名) AS '人数'
FROM
	表名
GROUP BY
	字段名

 1.2查询每个部门的部门名称、部门人数、平均工资 :

分析:

由于要统计部门名称所以要和部门表进行关联,既然要统计部门就要以部门表为主,所以要右连接,在算平均值的可能会出现小数点多的情况,所以用了round函数保留了两位小数,由于40部门下没有人,也就没有平均工资所以会出现空的情况,用IFUNLL函数,如果为空显示0;

 

SELECT
	d.DNAME AS '部门名称',
	COUNT(e.DEPTNO) AS '部门人数',
  IFNULL(ROUND(AVG(e.SAL),2),0) AS '平均工资'
FROM
	emp e  -- 员工表
RIGHT JOIN
	dept d   -- 部门表
ON(e.DEPTNO = d.DEPTNO)
GROUP BY
	e.DEPTNO;

2、多字段分组查询:

 2.1查询每个部门的部门编号、部门名称、部门人数,平均工资:

SELECT
  d.DEPTNO AS '部门编号',
	d.DNAME AS '部门名称',
	COUNT(e.DEPTNO) AS '部门人数',
  IFNULL(ROUND(AVG(e.SAL),2),0) AS '平均工资'
FROM
	emp e
RIGHT JOIN
	dept d
ON(e.DEPTNO = d.DEPTNO)
GROUP BY
	e.DEPTNO,d.DEPTNO;

3、HAVING:

       在很多时候往往需要对分组之后的数据进行再次过滤,例如:要求部门人数超过5个人的部门信息,这样的操作首先要按照部门进行分组统计,而后子通过统计结果进行数据过滤,想要实现这样的功能,只能通过HAVING语句来完成。

having一般和group一起使用,分组后的两次筛选

3.1、查询出所有平均工资大于2000的部门信息、平均工资、员工人数。 

SELECT
	JOB AS '职位',
	AVG(SAL) AS '平均工资',
	COUNT(JOB) AS '员工人数'
FROM
	emp
GROUP BY
	JOB
HAVING
	AVG(SAL) > 2000;

3.2求出部门人数大于2人的部门,要求显示部门名称、部门编号、部门人数。

分析:先找出人数大于2人的部门。再按照要求显示:

SELECT
	d.DNAME AS '部门名称',
	d.DEPTNO AS '部门编号',
	COUNT(e.DEPTNO) AS '部门人数'
FROM
	emp e
RIGHT JOIN dept d ON (e.DEPTNO = d.DEPTNO)
GROUP BY
	d.DEPTNO
HAVING COUNT(e.DEPTNO);

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章