Oracle开发方面的面试题

人员情况表(employee)中字段包括,员工号(ID),姓名(name),年龄(age),文化程度(wh):包括四种情况(本科以上,大专,高中,初中以下),现在我要根据年龄字段查询统计出:表中文化程度为本科以上,大专,高中,初中以下,各有多少人,占总人数多少。结果如下:
学历       年龄      人数        百分比
本科以上   20        34           14
大专       20        33           13
高中       20        33           13
初中以下   20        100          40
本科以上   21        50           20

 

2.表结构:
教师ID     学生ID        学科名称  成绩
                  数学    80
                 数学     50
                 英语     61
                 英语     59
...
用一个sql完成
分教师统计出每个教师每门课及格人数和及格率

结果格式:

教师ID 学科名称 及格人数 及格率
      数学             50%

题一,
create table emp(id number,name varchar2(10),age int,wh varchar2(10));
insert into emp
select 1,'tom',20,'本科以上' from dual
union all select 2,'rose',20,'本科以上' from dual
union all select 3,'aa',21,'本科以上' from dual
union all select 4,'bb',21,'大专' from dual
union all select 5,'cc',21,'大专' from dual
union all select 6,'dd',21,'高中' from dual
union all select 7,'ee',21,'初中以下' from dual;

 

select wh 学历,age 年龄,count(*) 人数,round(count(*)/(select count(*) from emp),2)*100||'%' 百分比  from emp
group by wh,age

 

题2,

SQL> create table scores
   ( teacher_id number (2) ,
     student_id number (2) ,
     course  varchar2(20) ,
     score  number(3)) ;

Table created.

SQL>  
SQL> insert into scores values (1,1,'数学' , 80);

1 row created.

SQL> insert into scores values (1,2,'数学' , 50);

1 row created.

SQL> insert into scores values (2,3,'英语' , 61);

1 row created.

SQL> insert into scores values (2,4,'英语' , 59);

1 row created.

SQL> commit;

Commit complete.

select t1.teacher_id ,t1.course ,  t2.pass_student pass_number , to_char(t2.pass_student /t1.all_student *100 )|| '%'  pass_ratio from
   ( select teacher_id ,course ,  count(*)  all_student
   from scores  group by   teacher_id ,course   ) t1 ,
    ( select teacher_id , course , count(*)  pass_student
   from scores where score > 60  group by   teacher_id ,course ) t2
   where  t1.teacher_id =t2.teacher_id and t1.course = t2.course ;


 TEACHER_ID COURSE               PASS_NUMBER PASS_RATIO
---------- -------------------- ----------- -----------------------------------------
         1 数学                           1 50%
         2 英语                           1 50%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值