Oracle 关键字高级函数的使用

Posted wskxy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle 关键字高级函数的使用相关的知识,希望对你有一定的参考价值。

1.序列、唯一标识

  查询时,可以添加递增序列 rownum

  表的数据每一行都有一个唯一的标识 rowid

  

 2.函数

  单行:查询多条数据

    如:to_date()

  多行:查询总结数据,一般用于group by

    如:sum()

3.去重 distinct

  select distinct  from tablename

4.分区 partition

  select tenantcode,row_number() over(partition by tenantcode order by tenantcode, brandcode, storecode ) groupid
  from tablename

    

  若要分区筛选出id=1的,可以

select * from(
select tenantcode,row_number() over(partition by tenantcode order by tenantcode, brandcode, storecode) groupid
from tablename
)
where groupid=1

   row_number为直接排序,还可以替换成以下函数

    rank():  跳跃排序,如果有两个第一级时,接下来就是第三级。
    dense_rank():  连续排序,如果有两个第一级时,接下来仍然是第二级。

5.行列转换

  模拟表

With t as (
Select 1 id,\'桃子\' name,100 q1,200 q2,300 q3,400 q4 from dual
Union
Select 2 id,\'苹果\' name,111 q1,222 q2,333 q3, 444 q4 from dual
Union
Select 3 id,\'西瓜\' name,123 q1,234 q2,345 q3,456 q4 from dual
)

  

  列转行

Select * from t unpivot(nums for jidu in (q1,q2,q3,q4)) order by id;

  

  行转列

With t as (
Select 1 id,\'桃子\' name,100 q1,200 q2,300 q3,400 q4 from dual
Union
Select 2 id,\'苹果\' name,111 q1,222 q2,333 q3, 444 q4 from dual
Union
Select 3 id,\'西瓜\' name,123 q1,234 q2,345 q3,456 q4 from dual
),
bb as(
Select * from t unpivot(nums for jidu in (q1,q2,q3,q4)) order by id
)

Select * from bb pivot(max(nums) for jidu in (\'Q1\' Q1,\'Q2\' Q2,\'Q3\' Q3,\'Q4\' Q4)) --这里的max是如果有多行,选择最大,比如桃子有两个Q1

  

 6.null值置顶或垫底

select * from langmap order by lang4 nulls first/last

 6.存在则更新,不存在则新增

merge into v5_tenant_repair_appl_follow f
using (select \'2018111219530688462\' ra_id,\'test\' ra_staffcode from dual) n
on(f.ra_id=n.ra_id)
when matched then
  update set f.ra_staffcode=n.ra_staffcode
when not matched then
  insert values(n.ra_id,n.ra_staffcode)

 7.占比

select a.ra_id,a.ra_charge,
      ratio_to_report(a.ra_charge) over() pct 
from v5_tenant_repair_appl a

  pct表示该行的ra_charge所占比例

  over():可以用参数 partition by [字段] 进行分组,从而查询分组后ra_charge所占比例

8.选择第一个非空数据

select coalesce(null,null,1,null) from dual;

9.字节替换

select translate(\'ab123\', \'abcdefg123\', \'3456789abc\') from dual;

  第一个参数:输入的字符串

  第二个参数、第三个参数:替换规则,字节按顺序一一对应替换

  上式代码结果:34abc

以上是关于Oracle 关键字高级函数的使用的主要内容,如果未能解决你的问题,请参考以下文章

2C++ 的升级

SQL基础教程(第2版)第8章 SQL高级处理:8-1 窗口函数

如何在 Toad for Oracle 中使用自定义代码片段?

Oracle/SQLServer 中的分析函数高级教程 [关闭]

在这个 spark 代码片段中 ordering.by 是啥意思?

Oracle 高级排序函数 和 高级分组函数