本文整理自网络,侵删。
有些事情始终是需要坚持下去的。。。
今天复习一下之前用到的连续相同数据的统计。
首先,创建一个简单的测试表,这里过程就略过了,直接上表(真的是以简单为主,哈哈…)
第一种写法row_number()
:
SELECT val,COUNT(*) FROM (SELECT ID,val, row_number() OVER(ORDER BY ID)-row_number() OVER(PARTITION BY val ORDER BY ID) x FROM LCY ) GROUP BY val,x ORDER BY MIN(ID);
第二种rank()
:
SELECT val,COUNT(*) FROM (SELECT ID,val, rank() OVER(ORDER BY ID)-rank() OVER(PARTITION BY val ORDER BY ID) x FROM LCY) GROUP BY val,x ORDER BY MIN(ID);
第三种dense_rank()
:
SELECT val,COUNT(*) FROM (SELECT ID,val, dense_rank() OVER(ORDER BY ID)-dense_rank() OVER(PARTITION BY val ORDER BY ID) x FROM LCY )GROUP BY val,x ORDER BY MIN(ID);
结果:
三者在这里的用法只是换汤不换药,但是在其他的需求里还是有区别的,比如成绩排名。
本章涉及到的知识点是分析函数、聚合函数,除此之外还有数据分析函数和统计求和函数。
简单介绍一下:
相关阅读 >>
mysql和oracle的区别小结(功能性能、选择、使用它们时的sql等对比)
oracle数据库rownum和row_number的不同点
更多相关阅读请进入《oracle》频道 >>
数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。