--部門表
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
最後,歡迎訪問風格清新簡潔的輕博客網站[指尖一刻]