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);