四大排序函数

row_number() over(partition by clause order by filed asc|desc )----连续的从1开始到n的排序号
[sql] view plain copy
rank() over ( partition by clause order by filed asc|desc)---不连续的可以出现重复排序号
[sql] view plain copy
dense_rank() over (partition by clause order by filed asc|desc)--连续的可以出现重复排序号

[sql] view plain copy
ntile (integer_expression) over (partition by clause order by filed asc|desc )--连续的可以分组排序并且排序号是连续的
[sql] view plain copy
----案例

create table tb (
[year] [int] NOT NULL,
[week] [int] NOT NULL,
[base_goods_id] [int] NOT NULL,
[uid] [bigint] NOT NULL,
[amount] [money] NOT NULL,
[count] [int] NOT NULL,
[bean] [money] NOT NULL
)
insert tb
select 2013,2,6577,20087,32640.00,1088,26112.00
union all
select 2013,2,6577,20211,39420.00,1314,31536.00
union all
select 2013,2,6577,20220,60.00,2,111.00
union all
select 2013,2,6577,20457,60.00,2,48.00
union all
select 2013,2,6577,20458,60.00,2,48.00
go
select * from tb
/*
2013 2 6577 20087 32640.00 1088 26112.00
2013 2 6577 20211 39420.00 1314 31536.00
2013 2 6577 20220 60.00 2 111.00
2013 2 6577 20457 60.00 2 48.00
2013 2 6577 20458 60.00 2 48.00
*/

select ROW_NUMBER() over(partition by base_goods_id order by count)rn,* from tb

/*
rn year week base_goods_id uid amount count bean
1 2013 2 6577 20220 60.00 2 111.00
2 2013 2 6577 20457 60.00 2 48.00
3 2013 2 6577 20458 60.00 2 48.00
4 2013 2 6577 20087 32640.00 1088 26112.00
5 2013 2 6577 20211 39420.00 1314 31536.00
*/

select dense_rank()over(partition by base_goods_id order by count )rn,* from tb
/*
rn year week base_goods_id uid amount count bean
1 2013 2 6577 20220 60.00 2 111.00
1 2013 2 6577 20457 60.00 2 48.00
1 2013 2 6577 20458 60.00 2 48.00
2 2013 2 6577 20087 32640.00 1088 26112.00
3 2013 2 6577 20211 39420.00 1314 31536.00
*/

select rank()over(partition by base_goods_id order by count )rn,* from tb

/*
1 2013 2 6577 20220 60.00 2 111.00
1 2013 2 6577 20457 60.00 2 48.00
1 2013 2 6577 20458 60.00 2 48.00
4 2013 2 6577 20087 32640.00 1088 26112.00
5 2013 2 6577 20211 39420.00 1314 31536.00
*/

select ntile(2)over(partition by base_goods_id order by count )rn,* from tb

/*
rn year week base_goods_id uid amount count bean
1 2013 2 6577 20220 60.00 2 111.00
1 2013 2 6577 20457 60.00 2 48.00
1 2013 2 6577 20458 60.00 2 48.00
2 2013 2 6577 20087 32640.00 1088 26112.00
2 2013 2 6577 20211 39420.00 1314 31536.00
*/

时间: 2024-10-19 09:04:16

四大排序函数的相关文章

详解四大排序算法

作者: Dsir 分类: PHP 发布时间: 2017年08月04日 07时40分 详解四大排序算法 如何排序? NBA总决赛正在如火如荼的进行,老詹也正朝着他的第5个总亚军前进着.假设骑士队队员在运动场上排列成一队,如图所示,所有队员已经站好,准备热身,现在需要按身高从低到高 为队员们排队(最矮的站在左边),给他们照一张集体照,应该怎么排队呢? 在排序这件事情上,人与计算机程序相比有以下优势:我可以同时看到所有的队员,并且可以立刻找出最高的一个,毫不费力得测量和比较每一个人的身高.而且队员们不

算法学习 - 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