252

在现代数据驱动的应用程序中,这对于有效查询和排序数据至关重要。 SQL语言提供了实现此目标的各种强大工具,并且()函数是非常有用的工具。它可以按分组对数据进行排序,并为每行分配一个唯一的行号。当处理复杂的数据集时,例如在页面上显示数据时或需要在组中进行排序时,这一点特别有用。本文将详细介绍如何使用()函数将(在数据库中进行分组和排序),并演示如何通过特定示例使用它。

1。序言

‌()over(按顺序)是一个可以在Hive和.0或更高版本中使用的SQL窗口函数。它用于对每个分区中的每一行排序和编号,从1开始编号,并给出连续数字。它通常用于分析和报告等方案,可以帮助我们在分区后对数据进行分类并获得排名信息。

()该函数可以按功能完成以下功能和顺序。

应用程序方案:例如,在学校考试结束后,按学科组成,每个主题都按分数排序以获得前十名。

摘要:这是一个分组排序函数,可以首先将查询结果集分组,然后在每个组中对其进行排序。从1开始,将每个组中的一行分配给连续的唯一数字。

2。()语法

注意:以下两种写作方法是分组分类函数,语法所获得的效果相同。

编写的第一种方法:()通过(通过将列订单分组为ASC/DESC)为别名

写作的第二种方式:()over(通过将列排序分类为ASC/desc)为别名

简而言之,在执行该函数时,首先根据by的列进行分组。将组分开后,根据顺序列将其排序。

功能:

注意:

问题

问:该功能为每个组中的每一行分配了唯一的连续编程。也就是说,组中的每一行数据编号只会从1分配,并且不会重复。如果我们对考试成绩进行排序,并希望具有相同分数的人会排名相同,该怎么办?

答:此时,您需要使用rank()函数或()函数。这两个函数将相同的排名分配给相同的值。

3。用法示例

根据.0执行以下示例

准备数据

create table test(
       id varchar(10) NOT NULL,
       `name` varchar(10) NULL,
       age varchar(10) NULL,
       salary int NULL
);
-- 数据是每个人不同年龄段的薪资数据
insert into test(id,`name`,age,salary) values(101,'张三',24,15000);
insert into test(id,`name`,age,salary) values(101,'张三',22,8000);
insert into test(id,`name`,age,salary) values(101,'张三',20,6500);
insert into test(id,`name`,age,salary) values(102,'李四',23,18000);
insert into test(id,`name`,age,salary) values(102,'李四',22,8500);
insert into test(id,`name`,age,salary) values(102,'李四',21,7500);
insert into test(id,`name`,age,salary) values(103,'王五',24,25000);
insert into test(id,`name`,age,salary) values(103,'王五',22,18000);
insert into test(id,`name`,age,salary) values(103,'王五',20,12000);
select * from test;

表数据:

3.1。对查询进行排序结果相反顺序(无分组)

SELECT id,`name`,age,salary,ROW_NUMBER() OVER(ORDER BY salary DESC) rn
FROM test;

注意:如果您不指定组,则将对全局进行排序,将所有数据视为组;然后,每行将在每个组中的1个连续编号。如上图所示,RN从1到9开始。

3.2。小组查询结果并对其进行排序

SELECT id,`name`,age,salary,ROW_NUMBER() OVER(PARTITION BY name ORDER BY salary DESC) RN
FROM test;

注意:首先按名称执行,然后通过排序在组中进行排序。

如上图所示:RN将为每个组中的每一行数据分配一个唯一的连续数字。

3.3。检查每个ID的最高工资

也就是说,在分组后按工资分类,并在每组中找到最高工资(分类为1)的记录

SELECT *
FROM (SELECT id,`name`,age,salary,ROW_NUMBER() OVER(PARTITION BY id ORDER BY salary DESC) RN
FROM test) a
WHERE a.RN = 1 ;

找出每个ID的最高工资,即每个ID组的排名

从一个示例中学习:我们还可以使用上述示例,例如,我们可以在比赛中每个组中获得前十名。也就是说,首先,然后对分数进行排序并获得RN

免责声明:
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
附: 二○○二年一月一日《计算机软件保护条例》第十七条规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬!鉴于此,也希望大家按此说明研究软件!
注:本站所有资源均来自网络转载,版权归原作者和公司所有,如果有侵犯到您的权益,请第一时间联系邮箱:785557022@qq.com 我们将配合处理!
----------------------------------------------------
版权声明:
一、本站致力于为软件爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。
二、本站提供的所有下载文件均为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。

三、我站提供用户下载的所有内容均转自互联网。如有内容侵犯您的版权或其他利益的,请编辑邮件并加以说明发送到站长邮箱。站长会进行审查之后,情况属实的会在三个工作日内为您删除。

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