一.小知识点
1. 双引号:列重命名为中文或者数字时必须用双引号(重命名为字母时用单双引号都可以)
区:赋值、输出时 中文用的都是单引号
declare
people_name varchar2(20) := '张延'
begin
...
end;
2. 四舍五入使用round()
注:round可用于数值和日期函数
3. case、decode用于select后,可以和分组函数一起用
二.分组函数:对一批数据进行操作后返回一个值(所以分组函数一定是在group by后执行)
例如:创建一个查询显示雇员总数,和在 2001 、2002 、2003 和受雇的雇员人数。创建适当的列标题。
法1(用case):
select count(a.ename) "受雇总人数",
sum(case when to_char(a.hiredate)='01%' then 1 else 0 end) "2001",
sum(case when to_char(a.hiredate)='02%' then 1 else 0 end) "2002",
sum(case when to_char(a.hiredate)='03%' then 1 else 0 end) "2003"
from scott.emp a;
法2(用decode):
select count(a.empno) "受雇总人数",
sum(decode(to_char(a.hiredate,'yyyy'),'2001',1,0)) "2001",
sum(decode(to_char(a.hiredate,'yyyy'),'2002',1,0)) "2002",
sum(decode(to_char(a.hiredate,'yyyy'),'2003',1,0)) "2003"
from scott.emp a;
注:case、decode用于select后,case、decode用于select后,可以和分组函数一起用
列重命名为中文或者数字时用的是双引号
三.分析函数:排名
rank() over( (partiton by ...) order by ... asc) as a_rank
1.注:
1> 蓝色的为可选项
2> rank():具有相等值的行排位相同,序号随后跳跃 (1,2,2,4)
dense_rank():具有相等值的行排位相同,序号是连续的 (1,2,2,3)
row_number():返回连续的序号,不论是否相等 (1,2,3,4)
3> as a_rank:重命名时注意标识符命名必须以英文字母开始,列重命名为中文或者数字时用的是双引号
2.例如:
select sub_name,rank() over(partition by sub_name order by score asc) as a_rank
from paiming
order by sub_name,a_rank;--将结果按课程名排序,并在各个课程内部按照名次排序
注:order by可用于中文排序,注意其后有多个变量时的意思
四.集合运算???