Sql的case when 语法
1. case when 语法
CASE
WHEN ElM_C_ACT >= ELM_C_MIN
AND ElM_C_ACT <= ELM_C_MAX THEN '3'
WHEN ElM_C_ACT < ELM_C_MIN
AND ElM_C_ACT >= ELM_C_MINL THEN '2'
WHEN ElM_C_ACT < ELM_C_MINL THEN '1'
WHEN ElM_C_ACT > ELM_C_MAX
AND ElM_C_ACT <= ELM_C_MAXL THEN '4'
WHEN ElM_C_ACT > ELM_C_MAXL THEN '5'
ELSE '3'
END AS ELM_FLAG
这里将ElM_C_ACT 变成了ELM_FLAG 一对一关系
这里case when else end as 先出来那一列然后往里面填值
CASE
WHEN ELM_FLAG = 1 THEN 1
ELSE 0
END AS C_LSS_MINL,
CASE
WHEN ELM_FLAG = 2 THEN 1
ELSE 0
END AS C_LSS_MIN,
CASE
WHEN ELM_FLAG = 3 THEN 1
ELSE 0
END AS C_QUALFD,
CASE
WHEN ELM_FLAG = 4 THEN 1
ELSE 0
END AS C_GRT_MAX,
CASE
WHEN ELM_FLAG = 5 THEN 1
ELSE 0
END AS C_GRT_MAXL
这里将ELM_FLAG不同的值变成了C_QUALFD,C_LSS_MIN,C_LSS_MINL,C_GRT_MAX,C_GRT_MAXL
1,2 1 0 1 0 0 0
2,3 2 0 0 1 0 0
3,4 3 0 0 0 1 0
4,1 4 1 0 0 0 0
5,2 5 0 1 0 0 0
6,3 6 0 0 1 0 0
2.分析函数
lag与lead函数是跟偏移量相关的两个分析函数,通过这两个函数可以在一次查询中取出同一字段的前N行的数据(lag)和后N行的数据(lead)作为独立的列,从而更方便地进行进行数据过滤。这种操作可以代替表的自联接,并且LAG和LEAD有更高的效率
over()表示 lag()与lead()操作的数据都在over()的范围内,他里面可以使用partition by 语句(用于分组) order by 语句(用于排序)。partition by a order by b表示以a字段进行分组,再 以b字段进行排序,对数据进行查询。
3.分析函数是什么?
分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计值。
分析函数和聚合函数的不同之处是什么?
普通的聚合函数用group by分组,每个分组返回一个统计值,而分析函数采用partition by分组,并且每组每行都可以返回一个统计值。
分析函数的形式
分析函数带有一个开窗函数over(),包含三个分析子句:分组(partition by), 排序(order by), 窗口(rows) ,他们的使用形式如下:over(partition by xxx order by yyy rows between zzz)。
row_number() over(partition by 列名1 order by 列名2 desc)的使用
SELECT name,age,detail,ROW_NUMBER() OVER(PARTITION BY name ORDER BY age DESC) FROM TEST_Y;
Partition by 相当于分组,但是可以是列出来列中的某一个
(63条消息) oracle分析函数汇总_cc_0101的博客-CSDN博客_oracle 分析函数
select v1,v2,sum(v2) over(order by v2) as sum
select v1,v2,sum(v2) over(partition by v1 order by v2) as sum
select v1,v2,sum(v2) over(partition by v1) as sum
4.oracle with as用法
with as语法
相当于建了个临时表 ,或者sql的别命名