oracle的sql语句子查询和行转列

分组查询

分组: group by 分组字段
–查询公式:select 数据 from 数据来源 where 行过滤条件 group by 分组字段1,… having 过滤组信息(以组为单位过滤) order by 排序字段…;
执行流程: from – where --group by --having --select – order by
注意:
– 1)select 后如果出现了组函数|分了组,组函数不能与非分组字段,可以与其他组函数或分组字段一起使用
– 2)where 后不能使用组函数 因为还没有组,执行流程问题
– 找出20部门和30部门的最高工资
–20部门和30部门中的所有员工中的最高工资

select max(sal) from emp where deptno in (30,20);

–找出20部门和30部门中每个部门的最高工资

select max(sal),deptno from emp where deptno in (30,20) group by deptno;  --先过滤 后分组
select max(sal),deptno from emp group by deptno having deptno in (30,20); --先分组再过滤

– 求出每个部门的平均工资

select avg(sal),deptno from emp group by deptno;

– 求出每个部门员工工资高于1000的的部门平均工资

select avg(sal),deptno from emp where sal>1000 group by deptno;

– 求出10和20部门部门的哪些工资高于1000的员工的平均工资

select avg(sal),deptno from emp where sal>1000 group by deptno having deptno in(10,20);

–不推荐使用,效率相对较低

select * from (select avg(sal),deptno from emp where sal>1000 group by deptno) where deptno in(10,20);

– 求出每个部门的平均工资高于2000的部门编号和平均工资

select avg(sal),deptno from emp group by deptno having avg(sal)>2000 ;
select * from (select avg(sal) avg_sal,deptno from emp group by deptno) where avg_sal>2000;

行转列

/*
id name course score
1 张三 语文 81
2 张三 数学 75
3 李四 语文 81
4 李四 数学 90
5 王五 语文 81
6 王五 数学 100
7 王五 英语 90
*/
--创建表
create table tb_student(
 id number(4) ,
 name varchar2(20),
 course varchar2(20),
 score number(5,2)
);
--插入数据
insert into tb_student values(1,'张三','语文',81);
insert into tb_student values(2,'张三','数学',75);
insert into tb_student values(3,'李四','语文',81);
insert into tb_student values(4,'李四','数学',90);
insert into tb_student values(5,'王五','语文',81);
insert into tb_student values(6,'王五','数学',100);
insert into tb_student values(7,'王五','英语',90);
commit; --提交
--删除表
drop table tb_student cascade constraints;


select * from tb_student;

–行专列
(max和min会把查询出来的null去掉只剩下一行有值数据)

select name,max(decode(course,'语文',score)) 语文,min(decode(course,'数学',score)) 数学,max(decode(course,'英语',score)) 英语 from tb_student group by name;

–decode() 是单行函数

select name,decode(course,'语文',score) 语文,decode(course,'数学',score) 数学,decode(course,'英语',score) 英语 from tb_student;

你可能感兴趣的:(sql,oracle)