關鍵字: group by (分組) 和 having (過濾)
--統計每個部門的人數 -- group by 用於分組查詢,后面跟分組參照字段 --分組查詢以后,多行函數功能是統計每組的數據 select * from emp; select count(*) from emp group by deptno; select deptno, count(*) from emp group by deptno; --統計每個部門人數,總工資,最高工資,最低工資,平均工資 select deptno,count(*),sum(sal),max(sal),min(sal),avg(*) from emp group by deptno order by deptno desc; --注意:其中order by deptno desc 是按照部門的降序排列。 --統計每個部門的人數和平均工資,排除部門編號是10的 select deptno,count(*),avg(sal) from emp where deptno <>10 group by deptno ; --where子句不能寫到group by 后面 order by 可以寫到后面 --統計每個部門的人數,平均工資,排除工資小於2000的部門 select deptno,count(*),avg(sal) from emp where avg(sal) >= 2000 group by deptno order by deptno desc; --這種寫法是錯誤的,分組過濾需要使用having從句!!! ---改進措施: --對分組查詢的結果進行過濾,要使用having從句,而不是where having寫到group by 后面 與where不一樣 select deptno,count(*),avg(sal) from emp group by deptno having avg(sal) >= 2000 order by deptno; ---知識小結: ----select -- from -- where -- group by -- having -- select -- order by 的遵從語法格式順序; -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ----統計每個部門人數,平均工資,排除部門編號為10的和平均工資小於2000的部門 select deptno,count(*),avg(sal) from emp where deptno != 10 group by deptno having avg(sal) <>2000 order by deptno desc; --desc 降序;asc是升序。 --emp表列出工資最小值小於2000的職位 (首先分組,按照職位分組) select job,min(sal) from emp group by job having min(sal) < 2000; --列出平均工資大於1200的部門和工作搭配的組合 deptno job select deptno,job,avg(sal) from emp group by deptno,job having avg(sal) > 1200; --統計人數小於4的部門的平均工資 (按照部門分組) select deptno,count(*),avg(sal) from emp group by deptno having count(*) < 4; --統計各部門最高工資,排除最高工資小於3000的部門 (按照部門排序) select deptno,max(sal) from emp group by deptno having max(sal) >= 3000 order by deptno; -----至此,我們的DQL語句中單表查詢結束,后面的牽涉到多表查詢。
