Oracle分页
rownum伪列
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21
注意:未查询出数据时,rownum使用> ,>=, =返回控数据
Oracle with as 用法
with as语法
–针对一个别名
with tmp as (select * from tb_name)
–针对多个别名
with
tmp as (select * from tb_name),
tmp2 as (select * from tb_name2),
tmp3 as (select * from tb_name3),
…
例子:
with
e as (select * from scott.emp),
d as (select * from scott.dept)
select * from e, d where e.deptno = d.deptno;
Oracle case when then else end应用
语法:
CASE search_expression
WHEN expression1 THEN result1
WHEN expression2 THEN result2
...
WHEN expressionN THEN resultN
ELSE default_result
RND
使用case when 进行统计操作
SELECT to_char(DT.D, 'yyyy-MM-dd') d,
NVL(sum(case when T.CHECKIN_TYPE = 1 then 1 else 0 end),0) shigong,
NVL(sum(case when T.CHECKIN_TYPE = 2 then 1 else 0 end),0) guankong,
NVL(sum(case when T.CHECKIN_TYPE = 3 then 1 else 0 end),0) anjian
FROM date_temp DT
left join bs_checkin t
on dt.d = trunc(t.check_time) and t.sys_company_code = '${params.sysComCode}' and t.check_time is not null
GROUP BY DT.D
ORDER BY DT.D
oracle的decode函数使用
decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
该函数的含义如下:
IF 条件=值1 THEN
RETURN(翻译值1)
ELSIF 条件=值2 THEN
RETURN(翻译值2)
......
ELSIF 条件=值n THEN
RETURN(翻译值n)
ELSE
RETURN(缺省值)
END IF
decode(字段或字段的运算,值1,值2,值3)
例子:select sum(decode(性别,男,1,0)),sum(decode(性别,女,1,0)) from 表
partition by用法
partition by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partition by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,分区函数一般与排名函数一起使用
一、分区函数Partition By的与row_number()的用法
select *,row_number() over(partition by Grade order by Score desc) as Sequence from Student
二、分区函数Partition By与排序rank()的用法
1、分班后按学生成绩排名 该语句是对分数相同的记录进行了同一排名,例如:两个80分的并列第2名,第4名就没有了
select *,rank() over(partition by Grade order by Score desc) as Sequence from Student