oracle 统计表中数据信息

select e.deptno as 部门编号,
       d.dname as 部门名称,
       count(*) as 部门人数,
       sum(case 
          when e.sal>=2000 then 1 else 0 
          end) as 工资大于等于2000人数,
       sum(case
          when e.sal<2000 then 1 else 0
          end) as 工资小于2000人数
from emp e,dept d
where e.deptno=d.deptno
group by e.deptno,d.dname

==============================================================

姓名        体征       数值 
--------- ---------- -------- 
美男1       身高       1.60 
美男1       体重       60 
美男1       胸围       79 
美男2       身高       1.69 
美男2       体重       55 
美男2       胸围       77 

转换为如下结果:

姓名    身高     体重      胸围 
--------- ---------- -------- 
美男1   1.60     60        79 
美男2   1.69     55        77 

SQL语句:

SELECT 姓名,
CASE WHEN 体征=""身高"" THEN MAX(数值) END 身高,
CASE WHEN 体征=""体重"" THEN MAX(数值) END 体重,
CASE WHEN 体征=""胸围"" THEN MAX(数值) END 胸围 
FROM 
美男 GROUP BY 姓名,体征

 

==============================================================

查询哪个部门没有员工:

select d.deptno
from emp e,dept d
where d.deptno=e.deptno(+) and e.deptno is null

select d.deptno
from dept d  left join emp e
on d.deptno=e.deptno 
where e.deptno is null

===================================================================  

 学生表student(学号,姓名,性别,年龄),课程表course(编号,课程名称),选课表sc(学号,课程编号,成绩)

    查询选修了5门课程的学生学号和姓名

select s.id,s.name
from student s
where (select count(*) from sc where sc.id=s.id)=5

 

 ====================================================================

查询公司工资最高的前三位:

select * from (select * from emp order by sal desc) where rownum<=3

 

 

 

你可能感兴趣的:(oracle)