Oracle中decode 以及ROW_NUMBER() OVER() 函数等其它相关函数用法

简介: Oracle中decode 以及ROW_NUMBER() OVER() 函数等其它相关函数用法

1:含义解释:

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相当于:case when then else end语句

SELECT id,
DECODE(id,1,'第一个',2,'第二个','其它id') newId 
FROM   BRAIN_BAK.TEST_DW_ITEMS_DETA
select 字段1,decode(字段2,条件1,结果1,条件2,结果2,其它) from 表名
如果字段2 等于 条件一 则显示结果1.
如果字段2 等于 条件二 则显示结果2.
否则就显示其它

2:分组排序

语法格式:row_number() over(partition by 分组列 order by 排序列 desc)

例子:

SELECT RANGE_CODE,
                NEXTMONTH_PALN_VISITORS_NUM,
                NEXTMONTH_PALN_LAUNCHES_NUM,
                MONTH,
                DATA_TIME,
                CREATE_TIME,
                ROW_NUMBER() OVER (PARTITION BY RANGE_CODE,MONTH ORDER BY
 DATA_TIME DESC, CREATE_TIME DESC) RN
         FROM DS_AIR_MONTHLY_PLAN

3:如何查看同年数据如期的最新值

SELECT CONCAT(BigYear, BigMonth) 当前年数据最新值 FROM
 (SELECT MAX(年) BigYear,MAX(月) BigMonth FROM (
SELECT SUBSTR(TO_CHAR(DATA_TIME, 'yyyyMM'), 0, 4) AS 年 ,
SUBSTR(TO_CHAR(DATA_TIME, 'yyyyMM'), 5, 6) AS 月
FROM BRAIN.DWS_HR_TITLE_STATISTICS)
 GROUP BY 年)
--第二种查询结果方式
SELECT *
  FROM (SELECT ROW_NUMBER() OVER(PARTITION BY ORG_NO,TO_CHAR(DATA_TIME, 'YYYY') 
ORDER BY DATA_TIME DESC, STAT_TIME DESC) rn,
               ORG_NO 机构编号,
               EMP_NUM 总人数,
               TO_CHAR(DATA_TIME, 'YYYYMM') AS 数据日期
          FROM DWS_HR_EMPLOYEE_STAT
         WHERE IS_SUM = 1) a
 where a.rn = 1
--
根据年进行分组然后根据 DATA_TIME,STAT_TIME  进行降序排序,
这时 会出现一个新的名为 rn 的列,
类似与下面那个排序函数中的新出来的那一列 ,然后取第一列为 1 的最新数据

输出结果:

da33cb21dc694584a237f1435ba5bd27.png

排名函数 row_number()over(order by)用法

select * ,ROW_NUMBER() OVER(ORDER BY distId desc) as num from districtInfo

【查询语句说明】首先明确查询的结果为 *,num ,而 ROW_NUMBER() OVER(ORDER BY distId desc) 的作用是将查询的结果按照disId降序排列,给每条记录添加一个排名序号num(从1开始排)。

查询结果如下:5c4e7a09d8ab4f52972b5b1d20365321.png

4 :Oracle之行转列pivot函数

语法:pivot(任一聚合函数 for 需要转列的值所在列名 in (需转为列名的值))

--行转列
select 
  *
from 
  (SELECT 
  rspfd.FORECAST_YEAR , --年份
  rspfd.INDEX_CODE ,    --指标代码
  rspfd.INDEX_VALUE     --指标值
  FROM RPT_STK_PROFIT_FORECAST_DATA rspfd  
  WHERE rspfd.FORECAST_ID = 250717)
  pivot(
    max(INDEX_VALUE) for INDEX_CODE in (      --INDEX_CODE 即要转成列的字段
        '1000001' as INDEX_O1,                --max(INDEX_VALUE) 此处必须为聚合函数,
        '1000003' as INDEX_O2,                --in () 对要转成列的每一个值指定一个列名
        '1000008' as INDEX_O3,
        '1000009' as INDEX_O4
    )
  );

5:  使用MAX DECODE 实现 列转行函数

SELECT 
    T.FORECAST_YEAR,
    max(decode(T.INDEX_CODE,'1000001',T.INDEX_VALUE,'')) AS INDEX_O1,
    max(decode(T.INDEX_CODE,'1000003',T.INDEX_VALUE,'')) AS INDEX_O2,
    max(decode(T.INDEX_CODE,'1000008',T.INDEX_VALUE,'')) AS INDEX_O3,
    max(decode(T.INDEX_CODE,'1000009',T.INDEX_VALUE,'')) AS INDEX_O4
  FROM (
  SELECT 
  rspfd.FORECAST_YEAR , --年份
  rspfd.INDEX_CODE ,    --指标代码
  rspfd.INDEX_VALUE     --指标值
  FROM RPT_STK_PROFIT_FORECAST_DATA rspfd  
  WHERE rspfd.FORECAST_ID = 111) T GROUP BY T.FORECAST_YEAR;

6:查询当前年时间,并往后推后俩年

select to_char(years) 年份 
from(select TO_CHAR(Sysdate, 'YYYY') - level + 1 years 
from dual connect by level <= 3)

853a46ff98a345579a1d3fed59c34319.png

持续更新中。。。。



目录
相关文章
|
29天前
|
SQL 存储 Oracle
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法(上)
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法
|
27天前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之使用JDBC方式读取Oracle的number类型时,通过什么方式进行映射
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
实时计算 Flink版产品使用合集之使用JDBC方式读取Oracle的number类型时,通过什么方式进行映射
|
29天前
|
NoSQL Oracle 关系型数据库
MongoDB与Oracle:管道函数兼容之道
【4月更文挑战第20天】
11 2
|
29天前
|
SQL 存储 Oracle
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法(下)
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法
|
29天前
|
存储 SQL Oracle
Oracle创建函数:数据王国的“魔法秘籍”
【4月更文挑战第19天】Oracle函数是数据处理的利器,专注于计算与返回值。通过`CREATE OR REPLACE FUNCTION`定义函数名、参数及返回类型,如示例中的加法函数`add_numbers`。调用函数时,可将其结果赋值给变量。函数可包含复杂逻辑和SQL,与其他数据库对象交互,用于触发器或存储过程。注意函数设计的唯一性、参数类型和性能优化。掌握函数使用能提升代码可读性和数据库管理效率。
|
29天前
|
Oracle 关系型数据库 数据挖掘
Oracle常用系统函数之聚集函数:数据的统计大师
【4月更文挑战第19天】Oracle的聚集函数是数据统计的强大工具,包括`SUM`(求和)、`COUNT`(计数)、`AVG`(平均值)、`MAX`和`MIN`(最大值和最小值)、`STDDEV`(标准差)等。这些函数帮助我们汇总、分析数据,提供丰富的统计信息。熟练掌握这些函数,能提升数据分析效率,助你成为数据大师。
|
29天前
|
Oracle 关系型数据库 数据管理
Oracle常用系统函数之日期和时间类函数:时空穿梭者的魔法棒
【4月更文挑战第19天】Oracle数据库中的日期和时间函数是强大的工具,如同时空穿梭者的魔法棒。`SYSDATE`和`CURRENT_TIMESTAMP`能显示当前时间,助你在数据中记录关键时刻;`ADD_MONTHS`函数让你轻易跃过月份,实现时间穿越;而`TO_DATE`和`TO_CHAR`则负责日期和时间的格式转换,如同时间的化妆师。除此之外,还有`EXTRACT`、`LAST_DAY`等更多魔法道具,帮助数据管理专家们自如操控时间,解决各种挑战。掌握这些函数,你也能在数据世界中自由穿梭!
|
29天前
|
Oracle 算法 关系型数据库
Oracle常用系统函数之数字类函数:数字的魔术师
【4月更文挑战第19天】Oracle数据库中的数字类函数是数字处理的魔术师,包括`ROUND`(四舍五入),`CEIL`和`FLOOR`(向上/下取整),以及`ABS`(计算绝对值)。还有`MOD`、`TRUNC`和`POWER`等函数,提供求余数、截断和计算幂的功能。熟练运用这些函数能提升数据管理效率,让处理数字变得更简单、有趣。
|
29天前
|
Oracle 关系型数据库 数据管理
Oracle常用系统函数之字符类函数:文字的魔法师
【4月更文挑战第19天】Oracle数据库中的字符类函数是字符串处理的魔法师:`INITCAP`首字母大写,`TRIM`去除多余字符,`CONCAT`拼接字符串。还有`SUBSTR`、`LENGTH`、`UPPER`和`LOWER`等,助你轻松应对字符串问题,成为数据管理专家!
|
8天前
|
Oracle 关系型数据库 数据库
已解决:idea 连接 oracle 数据库 避雷
已解决:idea 连接 oracle 数据库 避雷