oracle查詢員工人數最少的部門

--部門表
create table t_dept
(
 d_id number primary key ,
 d_name varchar2(20)
);
create sequence dept_sequence 
start with 1
increment by 1;
--員工表
create table t_emp
(
 e_id number primary key ,
 d_id number references t_dept(d_id),
 e_name varchar2(20)
);
create sequence emp_sequence 
start with 100
increment by 1;

insert into t_dept values(dept_sequence.nextval,'一部');
insert into t_dept values(dept_sequence.nextval,'二部');
select * from t_dept;
--“一部”插入4個員工
insert into t_emp values(emp_sequence.nextval,2,'張一');
insert into t_emp values(emp_sequence.nextval,2,'張二');
insert into t_emp values(emp_sequence.nextval,2,'張三');
insert into t_emp values(emp_sequence.nextval,2,'張四');
--“二部”插入2個員工
insert into t_emp values(emp_sequence.nextval,3,'李一');
insert into t_emp values(emp_sequence.nextval,3,'李一');
select * from t_emp;


目的:查詢員工人數最少的部門

知識點:分組函數,排序,子查詢,rownum

sql語句如下:

select * from (select count(*) coun,d_id deptId from t_emp group by d_id order by coun asc) where rownum=1


分析:

第一步:select count(*) coun,d_id deptId from t_emp group by d_id 查詢t_emp表,根據部門d_id分組查詢各部門的人數以d_id

第二步:select count(*) coun,d_id deptId from t_emp group by d_id order by coun asc 再orderby coun asc ,這樣就按照人數升序排序,這樣就第一條就是人數最少的

第三步:子查詢,select * from (select count(*) coun,d_id deptId from t_emp group by d_id order by coun asc) where rownum=1 ,因爲oracle不支持select top 1,當要取第一條數據的時候,要用到oracel給查詢分配的rownum列,where rownum=1就取到第一條數據了

結果如下:

---------------------------------------

counn deptid

---------------------------------------

2           3



最後,歡迎訪問風格清新簡潔的輕博客網站[指尖一刻]



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