搜索
首页数据库mysql教程DENSE_RANK分析函数的使用
DENSE_RANK分析函数的使用Jun 07, 2016 pm 02:56 PM
rank使用函数分析发现突然

突然发现DENSE_RANK是个不错的函数,以前一直以为FIRST_VALUE,LAST_VALUE可以替代 ,但是其实不然.有时候可以用的到大家。 DENSE_RANK 功能描述:根据ORDER BY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置。组内的数据按ORDER BY子句排

突然发现DENSE_RANK是个不错的函数,以前一直以为FIRST_VALUE,LAST_VALUE可以替代 ,但是其实不然.有时候可以用的到大家。

DENSE_RANK

功能描述:根据ORDER BY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置。组内的数据按ORDER BY子句排序,然后给每一行赋一个号,从而形成一个序列,该序列从1开始,往后累加。每次ORDER BY表达式的值发生变化时,该序列也随之增加。有同样值的行得到同样的数字序号(认为null时相等的)。密集的序列返回的时没有间隔的数.

FIRST

功能描述:从DENSE_RANK返回的集合中取出排在最前面的一个值的行(可能多行,因为值可能相等),因此完整的语法需要在开始处加上一个集合函数以从中取出记录

SAMPLE:下面例子中DENSE_RANK按部门分区,再按佣金commission_pct排序,FIRST取出佣金最低的对应的所有行,然 后前面的MAX函数从这个集合中取出薪水最低的值;LAST取出佣金最高的对应的所有行,然后前面的MIN函数从这个集合中取出薪水最高的值

 

LAST

功能描述:从DENSE_RANK返回的集合中取出排在最后面的一个值的行(可能多行,因为值可能相等),因此完整的语法需要在开始处加上一个集合函数以从中取出记录

SAMPLE:下面例子中DENSE_RANK按雇用日期排序,FIRST取出salary最低的对应的所有行,然后前面的MAX函数从这个集合中取出薪水最低的值;LAST取出雇用日期最高的对应的所有行,然后前面的MIN函数从这个集合中取出薪水最高的值

SELECT

  department_id,

  first_name||' '||last_name employee_name,

  hire_date,

  salary,

  MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY hire_date) OVER (PARTITION BY department_id) "Worst",

  MAX(salary) KEEP (DENSE_RANK LAST ORDER BY hire_date) OVER (PARTITION BY department_id) "Best"

FROM employees

 DENSE_RANK分析函数的使用

然后再举个使用dense rank的例子,其实在有些特别的场景,比如我说统计部门最高工资里面入职最早员工的信息,dense rank 的first , last函数就非常好实现.

下面例子是求最大最小值的,其实没有完全利用到我刚才说的那个场景.

CREATE TABLE TEST(  V1  VARCHAR2(20),  V2  VARCHAR2(10),  V3  VARCHAR2(10)) ;
Insert into TEST   (V1, V2, V3) Values   ('1', '1', 'm');
Insert into TEST   (V1, V2, V3) Values   ('1', '2', 'f');
Insert into TEST   (V1, V2, V3) Values   ('2', '1', 'n');
Insert into TEST   (V1, V2, V3) Values   ('2', '2', 'g');
Insert into TEST   (V1, V2, V3) Values   ('3', '1', 'b');
Insert into TEST   (V1, V2, V3) Values   ('3', '2', 'a');
Insert into TEST   (V1, V2, V3) Values   ('1', '3', 'a');
SQL> SELECT t.* ,t.rowid FROM test t order by v1,v2;

V1                   V2         V3         ROWID
-------------------- ---------- ---------- ------------------
1                    1          m          AAASUkAAEAAAAisAAA
1                    2          f          AAASUkAAEAAAAisAAB
1                    3          a          AAASUkAAEAAAAisAAG
2                    1          n          AAASUkAAEAAAAisAAC
2                    2          g          AAASUkAAEAAAAisAAD
3                    1          b          AAASUkAAEAAAAisAAE
3                    2          a          AAASUkAAEAAAAisAAF
怎么实现如下结果:
V1                   V3         V3
-------------------- ---------- ----------
1                    m          a
2                    n          g
3                    b          a
------------------------------------------------------------------------------------------------------------

Answer:

select v1
      ,max(v3) keep (dense_rank first order by v2)
      ,max(v3) keep (dense_rank last order by v2)
  from test
group by v1;

-------------------------------------------------------------------------------------------------------------

SELECT

  department_id,

  first_name||' '||last_name employee_name,

  hire_date,

  salary,

  MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY hire_date) OVER (PARTITION BY department_id) "Worst",

  MAX(salary) KEEP (DENSE_RANK LAST ORDER BY hire_date) OVER (PARTITION BY department_id) "Best"

FROM employees
CREATE TABLE TEST(  V1  VARCHAR2(20),  V2  VARCHAR2(10),  V3  VARCHAR2(10)) ;
Insert into TEST   (V1, V2, V3) Values   ('1', '1', 'm');
Insert into TEST   (V1, V2, V3) Values   ('1', '2', 'f');
Insert into TEST   (V1, V2, V3) Values   ('2', '1', 'n');
Insert into TEST   (V1, V2, V3) Values   ('2', '2', 'g');
Insert into TEST   (V1, V2, V3) Values   ('3', '1', 'b');
Insert into TEST   (V1, V2, V3) Values   ('3', '2', 'a');
Insert into TEST   (V1, V2, V3) Values   ('1', '3', 'a');
SQL> SELECT t.* ,t.rowid FROM test t order by v1,v2;
select v1
      ,max(v3) keep (dense_rank first order by v2)
      ,max(v3) keep (dense_rank last order by v2)
  from test
group by v1;
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何使用MySQL数据库进行预测和预测分析?如何使用MySQL数据库进行预测和预测分析?Jul 12, 2023 pm 08:43 PM

如何使用MySQL数据库进行预测和预测分析?概述:预测和预测分析在数据分析中扮演着重要角色。MySQL作为一种广泛使用的关系型数据库管理系统,也可以用于预测和预测分析任务。本文将介绍如何使用MySQL进行预测和预测分析,并提供相关的代码示例。数据准备:首先,我们需要准备相关的数据。假设我们要进行销售预测,我们需要具有销售数据的表。在MySQL中,我们可以使用

如何使用 Go 语言进行数据可视化分析?如何使用 Go 语言进行数据可视化分析?Jun 10, 2023 am 10:46 AM

随着大数据时代的到来,数据可视化分析在各行各业中扮演着至关重要的角色。而Go语言作为一种快速、高效、安全的编程语言,也逐渐在数据可视化分析领域占据一席之地。本文将探讨如何使用Go语言进行数据可视化分析。一、Go语言常用的数据可视化库Plotly:可用于在浏览器中创建交互式的图形,支持多种图形类型,如线图、条形图、散点图、热力图等。Gonum/plo

Linux下的实时日志监控与分析Linux下的实时日志监控与分析Jul 29, 2023 am 08:06 AM

Linux下的实时日志监控与分析在日常的系统管理和故障排查中,日志是一个非常重要的数据来源。通过对系统日志的实时监控和分析,我们可以及时发现异常情况并进行相应的处理。本文将介绍Linux下如何进行实时日志监控和分析,并提供相应的代码示例。一、实时日志监控在Linux下,最常用的日志系统是rsyslog。通过配置rsyslog,我们可以实现将不同应用程序的日志

统计分析法的步骤统计分析法的步骤Jun 28, 2023 pm 03:27 PM

统计分析,常指对收集到的有关数据资料进行整理归类并进行解释的过程。统计分析的基本步骤包括:1、收集数据;2、整理数据;3、分析数据。

如何使用PHP进行性能分析和调优如何使用PHP进行性能分析和调优Jun 06, 2023 pm 01:21 PM

作为一种流行的服务端语言,PHP在网站开发和运行中扮演着重要的角色。然而,随着PHP代码量的不断增加和应用程序的复杂性提高,性能瓶颈也越来越容易出现。为了避免这种问题,我们需要进行性能分析和调优。本文将简单介绍如何使用PHP进行性能分析和调优,为您的应用程序提供更高效的运行环境。一、PHP性能分析工具1.XdebugXdebug是一款广泛使用的代码分析工具,

最近大火的Diffusion Model,首篇扩散生成模型综述!最近大火的Diffusion Model,首篇扩散生成模型综述!Apr 09, 2023 pm 08:31 PM

本综述(Diffusion Models: A Comprehensive Survey of Methods and Applications)来自加州大学&Google Research的Ming-Hsuan Yang、北京大学崔斌实验室以及CMU、UCLA、蒙特利尔Mila研究院等众研究团队,首次对现有的扩散生成模型(diffusion model)进行了全面的总结分析,从diffusion model算法细化分类、和其他五大生成模型的关联以及在七大领域中的应用等方面展开,

rank函数的功能是什么rank函数的功能是什么Jul 18, 2022 pm 03:20 PM

rank函数的功能是对数据进行排位;rank函数是Excel的基础函数之一,能够返回结果集分区内指定字段值的排名,指定字段的值的排名是相关行之前的排名加一,语法为“RANK(number,ref,[order])”。

如何使用 Go 语言进行大数据分析?如何使用 Go 语言进行大数据分析?Jun 11, 2023 am 11:11 AM

随着数据规模逐渐增大,大数据分析变得越来越重要。而Go语言作为一门快速、轻量级的编程语言,也成为了越来越多数据科学家和工程师的选择。本文将介绍如何使用Go语言进行大数据分析。数据采集在开始大数据分析之前,我们需要先采集数据。Go语言有很多包可以用于数据采集,例如“net/http”、“io/ioutil”等。通过这些包,我们可以从网站、API、日志

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具