`

orace评级函数

    博客分类:
  • sql
SQL 
阅读更多

cume_dist():

功能描述:计算一行在组中的相对位置,返回大于0 小于等于1的数,例如在一个4行组中,分布是1/4 ,2/4 ,3/4  ,4/4

如果有重复的就乘以重复的个数,如第一行和第二行重复 分布为 (1/4)*2,(1/4)*2, 3/4 ,4/4

下面是例子:

表 all_sales

select 
*
 from all_sales t
where t.year=2003
and t.month =1
and t.amount is not null
and t.emp_id=21

=========================================
1	2003	1	1	21	10034.84
2	2003	1	2	21	1034.84
3	2003	1	3	21	1034.84
4	2003	1	4	21	3034.84

 

运行sql:
select 
t.prd_type_id
,t.amount
,CUME_DIST() over (order by t.amount asc) as cume_dist
 from all_sales t
where t.year=2003
and t.month =1
and t.amount is not null
and t.emp_id=21
================================
1	2	1034.84	0.5
2	3	1034.84	0.5
3	4	3034.84	0.75
4	1	10034.84	1

 

PERCENT_RANK()是某个值相对于一组值的百分比排名,大于等于0 小于等于1

select 
t.prd_type_id
,t.amount
,CUME_DIST() over (order by t.amount asc) as cume_dist
,percent_rank() over(order by t.amount desc )as percent_rank 
 from all_sales t
where t.year=2003
and t.month =1
and t.amount is not null
and t.emp_id=21
=================================
1	1	10034.84	1	0
2	4	3034.84	0.75	0.333333333333333
3	2	1034.84	0.5	0.666666666666667
4	3	1034.84	0.5	0.666666666666667

如果重复的话则记录的是小值,但是 cume_dist()记录的是大值。

 

NTILTE()函数记录N分片的值。

select 
t.prd_type_id
,t.amount
,CUME_DIST() over (order by t.amount asc) as cume_dist
,percent_rank() over(order by t.amount asc )as percent_rank 
,NTILE(5) OVER(order by t.amount desc )as ntile
 from all_sales t
where t.year=2003
and t.month =1
and t.amount is not null
and t.emp_id=21
=========================================
1	1	10034.84	1	1	1
2	4	3034.84	0.75	0.666666666666667	2
3	2	1034.84	0.5	0	3
4	3	1034.84	0.5	0	4

 

select 
t.prd_type_id
,t.amount
,CUME_DIST() over (order by t.amount asc) as cume_dist
,percent_rank() over(order by t.amount asc )as percent_rank 
,NTILE(3) OVER(order by t.amount desc )as ntile
 from all_sales t
where t.year=2003
and t.month =1
and t.amount is not null
and t.emp_id=21
==============================
1	1	10034.84	1	1	1
2	4	3034.84	0.75	0.666667	1
3	2	1034.84	0.5	0	2
4	3	1034.84	0.5	0	3

 感觉是排名函数 并且固定了排名的总个数。

 

row_number():

从1开始为每个分组返回一个数字

select 
t.prd_type_id
,t.amount
,CUME_DIST() over (order by t.amount asc) as cume_dist
,percent_rank() over(order by t.amount asc )as percent_rank 
,NTILE(2) OVER(order by t.amount desc )as ntile
,row_number() over(order by t.amount desc) as row_number
 from all_sales t
where t.year=2003
and t.month =1
and t.amount is not null
and t.emp_id=21
=============================
1	1	10034.84	1	1	1	1
2	4	3034.84	0.75	0.666667	1	2
3	2	1034.84	0.5	0	2	3
4	3	1034.84	0.5	0	2	4

 

 

Percentile_disc(x)Percentile_cont(x)的作用与cume_dist()percent_rank()相反:

select 
PERCENTILE_DISC(0.25) WITHIN GROUP(ORDER BY t.amount desc)
as percentile_disc
,
PERCENTILE_CONT(0.666666666666667) WITHIN GROUP(ORDER BY t.amount desc)
as percentile_cont
FROM all_sales t
where year =2003
and t.month =1
and t.amount is not null
and t.emp_id=21
==================================
1	10034.84	1034.84

 与下面的sql正好相反:

 

select 
t.prd_type_id
,t.amount
,CUME_DIST() over (order by t.amount desc) as cume_dist
,percent_rank() over(order by t.amount desc )as percent_rank 
 from all_sales t
where t.year=2003
and t.month =1
and t.amount is not null
and t.emp_id=21
======================
1	1	10034.84	0.25	0	XXXX		U
2	4	3034.84	0.5	0.333333333333333	XXXX		U
3	3	1034.84	1	0.666666666666667	XXXX		U
4	2	1034.84	1	0.666666666666667	XXXX		U

 

 

分享到:
评论

相关推荐

    Orace Essbase数据仓库函数大全

    Orace Essbase数据仓库函数大全,具有详细的函数说明和使用方法

    Orace与SQL常用函数对照文档

    ### Orace与SQL常用函数对照知识点详解 #### 一、ASCII 函数 - **功能**:返回与指定的字符相对应的十进制数值。 - **语法**:`ASCII(字符)` - **示例**: - `SELECT ASCII('A') A, ASCII('a') a, ASCII('0') zero...

    oracle常用函数.rar

    Oracle数据库是世界上最广泛使用的数据库系统之一,其丰富的函数集使得数据处理变得更为高效。本压缩包文件"oracle常用函数.rar"包含了一些关于Oracle数据库的重要知识点,主要包括“connect by”用法、SQL优化以及...

    Oracle分析函数

    ### Oracle分析函数详解 #### 一、概述 Oracle分析函数是一种强大的工具,它允许用户对查询结果进行复杂的分析处理,而无需多次查询数据库或编写复杂的程序逻辑。这大大简化了开发人员的工作,尤其是在处理大数据...

    orace性能优化高级培训

    orace性能优化

    stampgis连接orace数据库监听配置

    stampgis连接orace数据库监听配置

    ORACE的学习笔记

    - Oracle提供了`MAX`, `MIN`, `AVG`, `SUM`, `COUNT`等聚合函数用于数据统计,如:`SELECT MAX(sal), MIN(sal) FROM emp;` - 结合`GROUP BY`子句进行分组统计,如:`SELECT AVG(sal), MAX(sal), deptno FROM emp ...

    orace rac 功能测试

    Oracle RAC,全称为Real Application Clusters,是Oracle数据库的一项高级特性,用于构建高可用性和高性能的数据库集群。Oracle RAC允许多个服务器节点共享同一份物理数据库,从而提供连续的服务和负载均衡。...

    Orace基础经典

    3. **函数与过程**:在Oracle中,函数和过程是PL/SQL编程的一部分,它们可以用来封装复杂的业务逻辑。函数返回一个值,而过程不返回值,但可以修改数据库状态。熟悉如何创建、调用和管理这些函数和过程是提高数据库...

    orace 导入导出数据库

    ### Oracle 数据库导入导出详解 #### 一、Oracle 导出(Export)操作 **1.... 在Oracle中,我们可以通过`exp`命令来进行数据库的导出工作。若要将一个名为`TEST`的数据库进行完全导出,可以使用以下命令: ...

    orace 财务操作手册

    ### Oracle EBS 财务模块操作手册关键知识点解析 #### 一、系统应用介绍 **1.1 系统配置和安装** - **配置 Hosts 文件:** - 在 Windows 目录下查找 `Hosts` 文件,通常位于 `C:\WINNT\system32\drivers\etc\...

    Orace数据导出文件版本兼容修改工具

    "Orace数据导出文件版本兼容修改工具"就是为了解决这一特定问题而设计的。 该工具的主要功能是调整DMP文件的内部结构,使其符合目标数据库版本的要求。在Oracle数据库系统中,DMP文件是由`expdp`(数据泵导出)命令...

    Orace PPT 01

    3. Function-based索引:基于列的函数结果创建索引,用于优化包含函数的查询。 4. Clustered索引:数据行的物理顺序与索引顺序相同,提升范围查询性能。 六、Oracle安全性 Oracle提供了丰富的安全特性,如: 1. ...

    orace性能优化高级培训.rar

    - **索引优化**:何时使用B树索引、位图索引、函数索引,以及分区索引的优势。 - **绑定变量**:理解其对执行计划的影响,以及如何避免绑定变量漂移。 - **SQL重写**:通过SQL Profiles和SQL Plan Baselines来...

    orace数据仓库

    5. 查询与分析:介绍SQL查询优化技巧,以及使用Oracle的分析函数和OLAP功能进行深度分析。 6. 性能监控与调优:讲解如何监控数据仓库的性能,识别瓶颈,并实施相应的优化策略。 7. 安全管理:讨论如何设置权限,...

    orace导入导出的操作

    在Oracle数据库管理中,数据导入导出是至关重要的操作,特别是在数据迁移、备份与恢复、系统复制等场景中。Oracle提供了多种工具来实现这一目的,其中最常用的是`expdp`(Export Data Pump)和`impdp`(Import Data ...

Global site tag (gtag.js) - Google Analytics