排序函数

1.ROW_NUMBER

  ROW_NUMBER() OVER( PARTITION BY col1 ORDER BY col2)

  表示根据col1分组,在分组内部根据col2排序

  此函数计算的值就表示每组内部排序后的顺序编号,组内连续且唯一

  ROWNUM是伪列,ROW_NUMBER功能更强,可以直接从结果集中取出子集

  场景:按照部门编码分组显示,每组内按职员编码排序,并赋予组内编码

    SELECT deptno,ename,empno,

      ROW_NUMBER() OVER(PARTITION BY deptno ORDER BY empno) AS emp_id

    FROM emp;

2.RANK

  RANK() OVER(PARTITION BY col1 ORDER BY col2)

  表示根据col1分组,在分组内部根据col2给予等级标识

  等级标识即排名,相同的数据返回相同的排名

  跳跃排序,如果有相同数据,则排名相同,比如并列第二,则两行数据都标记为2,但下一位将是第四名

  和ROW_NUMBER的区别是有重复值,而ROW_NUMBER没有

  场景:按照部门编码分组,同组内按薪水倒序排序,相同薪水则按奖金数正序排列,并给予组内等级,用Rank_ID表示

    SELECT deptno,ename,sal,comm,

      RANK() OVER (PARTITION BY deptno ORDER BY sal DESC,comm) "Rank_ID"

    FROM emp;

3.DENSE_RANK

  DENSE_RANK OVER( PARTITION BY col1 ORDER BY col2)

  表示根据 col1分组,在分组内部根据col2给予等级标识

  即排名,相同的数据返回相同排名

  连续排序,如果有并列第二,下一个排序将是三,这一点是和RANK的不同,RANK是跳跃排序

时间: 2024-10-12 19:32:38

排序函数的相关文章

算法学习 - STL的p排序函数(sort)使用

排序函数sort() 这个函数是STL自带的,功能很强大~ 这里教下使用方法. sort()有三个参数,第一个是排序的起始位置,第二个是排序的结束位置,第三个是排序的判断函数.函数原型为: sort(<#_RandomAccessIterator __first#>, <#_RandomAccessIterator __last#>, <#_Compare __comp#>) 这个就是原型了~ 使用方法 首先假设我们有一个vector<int> vec;向量

C/C++排序函数

在应用中,如果我们不需要自己来编写排序函数的话,可以通过C/C++中已经实现的库函数来完成排序任务. 一.sort函数 sort函数在C++中<algorithm>中,若要使用,需要加上头文件#include <algorithm>,它有如下几种形式: (1)默认情况按升序排列: 假设数组为a[n],下标从0开始,对整个数组按升序排列: int a[110], n; //n表示元素个数 sort(a, a+n); //整个数组按升序排列 (2)若要将某个区间的元素排列,比如需要将第

泛型编程与C++标准模板库 : 浅谈sort()排序函数

以前用sort排序的时候,只知道sort函数有如下两种重载方式. template< class RandomIt > void sort( RandomIt first, RandomIt last ); template< class RandomIt, class Compare > void sort( RandomIt first, RandomIt last, Compare comp ); 当时对这些参数也不是很懂,只知道一些简单的用法. 1).比如: 如下代码可以使

python 自定义排序函数

自定义排序函数 Python内置的 sorted()函数可对list进行排序: >>>sorted([36, 5, 12, 9, 21]) [5, 9, 12, 21, 36] 但 sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1.如果 x 和 y 相等,返回 0. 因此,如果我们要实现倒序排序,只需要编写一个reversed_c

各种排序函数(摘)

sort的应用: 1.可以传入两个参数: sort(a,a+N) ,其中a是数组,a+N表示对a[0]至a[N-1]的N个数进行排序(默认从小到大排序): 2.传入三个参数: sort(a,a+N,cmp),第三个参数是一个函数 : 如果让函数从大到小排序,可以用如下算法实现: bool cmp(int a,int b){return a>b}; sort(A,A+N,cmp); 分排序函数函数:partial_sort: 例如,你现有一 个包含Widget对象(Widget意为“小挂件”)的v

hive分组排序函数 分组取top10

hive分组排序函数 分组取top10 语法:row_number() over( partition by 字段a order by 计算项b desc) rank --这里rank是别名 Partition by:类似hive的建表,分区的意思 这里按字段a分区,对计算项b进行降序排序 实例: 要取top10品牌,各品牌的top10渠道,各品牌的top10渠道中各渠道的top10档期 1) 取top10品牌 Select 品牌,count/sum/其他() as num from tb_na

排序函数重载

题目内容: 编写一组重载的排序函数,可以对两个整数.三个整数.四个整数.整数数组从大到小排序,函数名为sort,其中数组排序应使用递归的方法,另补充print函数,在一行显示排序后的数组元素. 主函数如下: int main() { int a,b,c,d; int data[100]; int k,n,i; cin>>k; switch(k) { case 1: cin>>a>>b; sort(a,b); cout<<a<<" &qu

C++ 排序函数 sort(),qsort()的使用方法

想起来自己天天排序排序,冒泡啊,二分查找啊,结果在STL中就自带了排序函数sort,qsort,总算把自己解脱了~ 所以自己总结了一下,首先看sort函数见下表: 函数名 功能描写叙述 sort 对给定区间全部元素进行排序 stable_sort 对给定区间全部元素进行稳定排序 partial_sort 对给定区间全部元素部分排序 partial_sort_copy 对给定区间复制并排序 nth_element 找出给定区间的某个位置相应的元素 is_sorted 推断一个区间是否已经排好序 p

修改后的双向选择排序函数

1 void BiSelectSort( int a[ ], int n ) /* 双向选择排序函数 */ 2 { int i, j, k, kmax, kmin, t; 3 for( i=0, j=n-1; i<j; ++i, --j ) 4 { kmin=kmax=i; 5 for( k=i+1; k<=j; ++k ) //一趟扫描找出最大值和最小值 6 { if( a[k]<a[kmin] ) kmin=k; 7 if( a[k]>a[kmax] ) kmax=k; 8 }

【T-SQL系列】新的排序函数

原文:[T-SQL系列]新的排序函数 如:ROW_NUMBER.RANK.DENSE_RANK三个分析函数都是按照col1分组内从1开始排序 ROW_NUMBER() 是没有重复值的排序(即使两天记录相等也是不重复的),可以利用它来实现分页 DENSE_RANK() 是连续排序,两个第二名仍然跟着第三名RANK() 是跳跃拍学,两个第二名下来就是第四名 示例: DECLARE @t1 TABLE ( Sequence INT , Name VARCHAR(20) , Score INT ) IN