SQL中Partition的相关用法

news/2024/10/23 5:32:38/

使用Partition可以根据指定的列或表达式将数据分成多个分区。每个分区都是逻辑上独立的,可以单独进行查询、插入、更新和删除操作。Partition可以提高查询性能,因为它可以限制在特定分区上执行查询,而不是在整个表上执行。

在SQL中,常用的Partition函数包括:


PARTITION OVER

用于在分区内进行计算。它可以在每个分区内对数据进行排序、聚合、分组等操作。

SELECT id, name, age, salary,AVG(salary) OVER (PARTITION BY age) AS avg_salary
FROM employees;

根据age列对employees表进行分区。然后,使用AVG()函数计算每个分区内的平均工资

ROW_NUMBER()

用于为每一行分配一个唯一的序号。它通常与PARTITION BY一起使用,以便在每个分区内为行编号。

SELECT id, name, age, salary,ROW_NUMBER() OVER (PARTITION BY age ORDER BY salary DESC) AS row_num
FROM employees;

在上面的例子中,根据age列对employees表进行分区。然后,使用ROW_NUMBER()函数为每个分区内的行分配一个唯一的序号,按照salary列的降序进行排序。

RANK

用于为每一行分配一个排名。它可以根据指定的排序规则,为每个分区内的行进行排名。

SELECT id, name, age, salary,RANK() OVER (PARTITION BY age ORDER BY salary DESC) AS rank
FROM employees;

根据age列对employees表进行分区。然后,使用RANK()函数为每个分区内的行分配一个排名,按照salary列的降序进行排序。

DENSE_RANK

与RANK()类似,但它不会跳过排名。即如果有两个行具有相同的排序值,则它们将被分配相同的排名。

SELECT id, name, age, salary,DENSE_RANK() OVER (PARTITION BY age ORDER BY salary DESC) AS dense_rank
FROM employees;

根据age列对employees表进行分区。然后,使用DENSE_RANK()函数为每个分区内的行分配一个排名,按照salary列的降序进行排序

NTILE

用于将数据分成指定数量的桶或分区。它可以将数据均匀分布到每个分区中。

SELECT id, name, age, salary,NTILE(4) OVER (ORDER BY salary DESC) AS ntile
FROM employees;

将employees表的数据分成4个分区,按照salary列的降序进行分区。然后,使用NTILE()函数为每个分区分配一个编号


http://www.ppmy.cn/news/979676.html

相关文章

redis面试1

Redis基础面试题 1、为什么要使用Redis做缓存 缓存的好处 使用缓存的目的就是提升读写性能。而实际业务场景下,更多的是为了提升读性能,带来更好的性 能,带来更高的并发量。Redis 的读写性能比 Mysql 好的多,我们就可以把 Mysq…

PHP关于字符串的各类处理方法

判断字符串是否以指定子串开头或结尾 function startsWith($str, $prefix) {return stripos($str, $prefix) 0; }function endsWith($str, $suffix) {return substr_compare($str, $suffix, -strlen($suffix)) 0; }// 示例用法 $text "hello world"; $result st…

【N32L40X】学习笔记03-gpio输出库

gpio输出 该函数库的目的就是在统一的地方配置&#xff0c;将配置的不同项放置在一个结构体内部使用一个枚举来定义一个的别名 led.c #include <stdio.h> #include "led/bsp_led.h"static led_t leds[LED_NUM]{{GPIOB,GPIO_PIN_2,RCC_APB2_PERIPH_GPIOB},{GP…

3秒快速打开 jupyter notebook

利用 bat 脚本&#xff0c;实现一键打开 minconda 特点&#xff1a; 1、可指定 python 环境 2、可指定 jupyter 目录 一、配置环境 minconda 可以搭建不同的 python 环境&#xff0c;所以我们需要找到 minconda 安装目录&#xff0c;把对应目录添加到电脑环境 PATH 中&#…

ADCS知识点全收录! 如何利用证书服务器对域控进行多角度攻击(上)

在2021年的BlackHat大会上&#xff0c;由Will Schroeder和Lee Christensen发布了关于Active Directory Certificate Services 利用白皮书《Certified Pre-Owned - Abusing Active Directory Certificate Services》&#xff0c;其中包含了大量的针对ADCS的攻击手法&#xff0c;…

离多态更近一步

在面向对象的语言里面,封装,继承,多态可谓是在熟悉不过了,当我们每次再去重新认识它们的时候总会有新的发现,为此我也经常感到疑惑,所以在这里和大家一起探讨三个问题,让我们在向多态靠近一点点。 虚表是否真的存在静态区 经常我们都会看见一个问题&#xff0c;虚表到底是存放…

【Redis】Redis zset 实现排行榜

文章目录 前言案例程序设计score 设计 (相同积分的排序)缓存数据定时刷新当心缓存击穿 前言 排行榜是业务开发中常见的一个场景&#xff0c;如何设计一个好的数据结构能够满足高效实时的查询&#xff0c;下面我们结合一个实际例子来讨论一下。 案例 大概需求就是: 排行榜上显…

20款奔驰S350商务型加装原厂前排座椅通风系统,夏天必备的功能

通风座椅的主动通风功能可以迅速将座椅表面温度降至适宜程度&#xff0c;从而确保最佳座椅舒适性。该功能启用后&#xff0c;车内空气透过打孔皮饰座套被吸入座椅内部&#xff0c;持续时间为 8 分钟。然后&#xff0c;风扇会自动改变旋转方向&#xff0c;将更凉爽的环境空气从座…