經典數據庫面試題--員工部門平均工資&&作者出書問題

員工工資:

實現:

drop table t_salary;
drop table t_dept;--部門信息

create table t_salary(
id varchar(2),
dept_id varchar(2),
name varchar(20),
salary number(7,2)
);
insert into t_salary values('1','1','Maggie',3454);
insert into t_salary values('2','2','Jerry',2300);
insert into t_salary values('3','3','Gitti',5600);
insert into t_salary values('1','1','Bill',4500);

create table t_dept(
dept_id varchar(2),
dept_name varchar(20)
);
insert into t_dept values('1','RQD');
insert into t_dept values('2','Sales');
insert into t_dept values('3','Markting');

select 
dept_name "部門名字",
t_salary.dept_id "部門編號",
avg(salary) "平均工資"   --分組內的平均值
from t_salary,t_dept
where t_salary.dept_id=t_dept.dept_id
group by t_salary.Dept_id,dept_name  --用兩個作爲分組依據:如果只有id的話,部門名無法顯示,而只有部門名字可能會重複。
having avg(salary)>3000;

drop table author;
drop table work_book;
create table author(
aid varchar(5),
aname varchar(20),
acountbooks number(4)
);
insert into author values('1001','wyf',null);
insert into author values('1002','jhl',null);
insert into author values('1003','lm',null);
insert into author values('1004','zn',null);
create table work_book(
aid varchar(5),
wbname varchar(20)
);
insert into work_book values('1001','a');
insert into work_book values('1002','b');
insert into work_book values('1003','c');
insert into work_book values('1001','d');

update author aa   --給author起別名
set acountbooks=
    NVL(
        (select count(aid) from work_book
        group by aid 
        having aid=aa.aid
        ),
        0
    );

注:sql中where和having的使用場景與區別


TOPN分析:取檢索結果的前n條記錄(或第A條到第B條)。
方式:配合使用嵌套和ROWNUM 僞列。
 

drop table course;--因爲與學生表建立關聯

 

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