当前位置: 首页 > article >正文

分桶函数的使用

除了 NTILE 函数,SQL 中还有其他一些与 分桶(bucketization)相关的函数,虽然它们的实现方式不同,但都涉及将数据分成多个区间或组。以下是一些常用的分桶函数:

1. CASE 语句

虽然 CASE 不是开窗函数,但它是一种非常灵活的方式,可以用于将数据手动分桶。通过根据某个条件将数据分配到不同的组或区间中,你可以自己定义如何分桶。

示例:

假设你想根据学生成绩将其分为四个等级:

SELECT student_id, score
, CASE WHEN score >= 90 THEN 'A'WHEN score >= 80 THEN 'B' WHEN score >= 70 THEN 'C'WHEN score >= 60 THEN 'D' 
ELSE 'F' END AS grade 
FROM students; 

在这个示例中,成绩被分为 A、B、C、D、F 这五个等级,类似于手动的分桶操作。

2. WIDTH_BUCKET(MySQL 和 Oracle)

WIDTH_BUCKET 函数是用于 分桶 数据的另一种方式,尤其是在 OracleMySQL 中,允许你将数据分配到指定数量的桶中,基于某个字段的范围。

  • WIDTH_BUCKET(expression, min_value, max_value, num_buckets)
    • expression:需要分桶的表达式(例如某个列的值)。
    • min_value:数据的最小值。
    • max_value:数据的最大值。
    • num_buckets:需要创建的桶的数量。

此函数将数据范围从 min_valuemax_value 均匀划分为 num_buckets 个桶,并根据每行的值确定其所属的桶。

示例(Oracle / MySQL)
SELECT score
, WIDTH_BUCKET(score, 0, 100, 5) AS score_bucket 
FROM students; 

在这个例子中,score 列的值将被均匀划分为 5 个桶,范围从 0 到 100。

3. PERCENT_RANK(MySQL 8.0+ 和其他数据库)

虽然 PERCENT_RANK 函数是一个计算排名的函数,但它也可以用于类似分桶的操作。它计算一个值的相对百分比排名,可以间接用于按分位数或百分位将数据分组。

  • PERCENT_RANK() 计算一个行在数据集中的百分比排名,结果是从 0 到 1 的值,表示该行相对于所有行的位置。
示例
SELECT student_id, score
, PERCENT_RANK() OVER (ORDER BY score DESC) AS percentile_rank 
FROM students; 

你可以使用 PERCENT_RANK 得到学生成绩的百分比排名,然后根据该排名手动划分数据到不同的桶中。

4. CUME_DIST(MySQL 8.0+ 和其他数据库)

类似于 PERCENT_RANKCUME_DIST 是一个排名函数,它计算某一行在数据集中的累积分布(Cumulative Distribution)。它返回一个值,表示当前行的值在数据集中的累积比例。可以用来间接进行数据的分段

示例
SELECT student_id, score
, CUME_DIST() OVER (ORDER BY score DESC) AS cumulative_distribution 
FROM students; 

然后,可以根据 CUME_DIST 的值,将数据分配到不同的分位区间中,相当于进行分桶。

5. RANK()DENSE_RANK()(MySQL 8.0+)

虽然 RANK()DENSE_RANK() 主要用于排序和排名,但也可以间接用于分桶操作。你可以通过给数据按某个字段进行排名,并将相同排名的数据划分到同一桶中。

示例
SELECT student_id, score
, RANK() OVER (ORDER BY score DESC) AS rank 
FROM students; 

可以根据 RANK()DENSE_RANK() 的值将数据分配到不同的桶,来分析数据的分布。


总结

除了 NTILE,常见的分桶方法还有:

  • 使用 CASE 语句手动分桶。
  • 使用 WIDTH_BUCKET(MySQL 和 Oracle)将数据按固定范围分桶。
  • 使用 PERCENT_RANKCUME_DIST 来按百分比排名并间接分桶。
  • 使用 RANK()DENSE_RANK() 排名后进行分段分析。

这些函数和方法都可以帮助你在 SQL 中将数据划分为不同的组或桶,根据需要选择适合的函数来实现。

相关文章:

分桶函数的使用

除了 NTILE 函数,SQL 中还有其他一些与 分桶(bucketization)相关的函数,虽然它们的实现方式不同,但都涉及将数据分成多个区间或组。以下是一些常用的分桶函数: 1. CASE 语句 虽然 CASE 不是开窗函数&…...

5. k8s二进制集群之ETCD集群部署

下载etcd安装包创建etcd配置文件准备证书文件和etcd存储目录ETCD证书文件安装(分别对应指定节点)创建证书服务的配置文件启动etcd集群验证etcd集群状态继续上一篇文章《k8s二进制集群之ETCD集群证书生成》下面介绍一下etcd证书生成配置。 下载etcd安装包 https://github.com…...

JMeter通过BeanShell写入CSV文件中的中文乱码

在 JMeter 中通过 BeanShell 写入 CSV 文件时,如果出现中文乱码问题,通常是因为文件编码不匹配。默认情况下,FileWriter 使用的是系统默认编码(可能是 ISO-8859-1 或其他非 UTF-8 编码),而中文字符需要 UTF…...

智能化转型2.0:从“工具应用”到“价值重构”

过去几年,“智能化”从一个模糊的概念逐渐成为企业发展的核心议题。2024年,随着生成式AI、大模型、智能体等技术的爆发式落地,中国企业正式迈入智能化转型的2.0时代。这一阶段的核心特征是从单一场景的“工具应用”转向全链条的“价值重构”&…...

X Window System 架构概述

X Window System 架构概述 1. X Server 与 X Client ​ 这里引入一张维基百科的图,在Linux系统中,若用户需要图形化界面,则可以使用X Window System,其使用**Client-Server**架构,并通过网络传输相关信息。 ​ ​ X…...

【ArcGIS Pro 简介1】

ArcGIS Pro 是由 Esri (Environmental Systems Research Institute)公司开发的下一代桌面地理信息系统(GIS)软件,是传统 ArcMap 的现代化替代产品。它结合了强大的空间分析能力、直观的用户界面和先进的三维可视化技术…...

启明星辰发布MAF大模型应用防火墙产品,提升DeepSeek类企业用户安全

2月7日,启明星辰面向DeepSeek等企业级大模型业务服务者提供的安全防护产品——天清MAF(Model Application Firewall)大模型应用防火墙产品正式发布。 一个新赛道将被开启…… DeepSeek的低成本引爆赛道规模 随着DeepSeek成为当前最热的现象级…...

小米AI眼镜官微上线,将与小米15 Ultra同台亮相,近屿智能用心培育 AI 人才

近日,小米眼镜官微已正式上线,认证主体为小米通讯技术有限公司。据悉,小米AI眼镜已获得入网许可,并计划提前至2月发布,与小米15 Ultra同台亮相。 此前,小米AI眼镜原定于2025年3月至4月发布。早在去年&#…...

Mac下使用brew安装go 以及遇到的问题

首先按照网上找到的命令进行安装 brew install go 打开终端输入go version,查看安装的go版本 go version 配置环境变量 查看go的环境变量配置: go env 事实上安装好后的go已经可以使用了。 在home/go下新建src/hello目录,在该目录中新建…...

在rtthread中,scons构建时,它是怎么知道是从rtconfig.h找宏定义,而不是从其他头文件找?

在rtthread源码中,每一个bsp芯片板级目录下都有一个 SConstruct scons构建脚本的入口, 在这里把rtthread tools/目录下的所有模块都添加到了系统路径中: 在tools下所有模块中,最重要的是building.py模块,在此脚本里面…...

Unity游戏(Assault空对地打击)开发(7) 爆炸效果

效果 准备 首先请手搓一个敌军基地。 然后添加一个火焰特效插件或者自建。 爆炸脚本编写 新建一个脚本命名为Explode。 无需挂载到对象上。 首先是全部代码。 using System.Collections; using System.Collections.Generic; using System.Linq; using TMPro; using UnityEngine…...

嵌入式面试题 C/C++常见面试题整理_7

一.什么函数不能声明为虚函数? 常见的不能声明为虚函数的有:普通函数(非成员函数):静态成员函数;内联成员函数;构造函数;友元函数。 1.为什么C不支持普通函数为虚函数?普通函数(非成员函数)只能被overload,不能被override,声明为虚函数也没有什么意思…...

excel实用问题:提取文字当中的数字进行运算

0、前言: 这里汇总在使用excel工作过程中遇到的问题,excel使用wps版本,小规模数据我们自己提取数据可行,大规模数据就有些难受了,因此就产生了如下处理办法。 需求:需要把所有文字当中的数字提取出来&…...

【prompt实战】AI +OCR技术结合ChatGPT能力项目实践(BOL提单识别提取专家)

本文原创作者:姚瑞南 AI-agent 大模型运营专家,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权) 目录 1. 需求背景 2. 目标 3. BOL通用处理逻辑…...

昇思打卡营第五期(MindNLP特辑)番外:硅基流动 x 华为云DeepSeek V3 API推理MindTinyRAG

1.前言 前脚,DeepSeek面临的巨头企业官宣加入vs多国政府下场质疑的冰火两重天局势尚未平静(DeepSeek在美两重天:五大巨头接入,政府诚惶诚恐);后脚,OpenAI被逼急,凌晨亮出全新推理…...

APP广告变现如何优化广告填充率,提升变现收益?

APP广告变现对接聚合广告平台可以提升广告变现效率,最大化广告收益。#APP广告变现# 一般来说,广告填充率越高,意味着广告采买方数量越多,可以将广告库存卖掉。但实际的广告变现业务中,100%的广告填充率几乎无法达成。…...

DeepSeek R1 Distill Llama 70B(免费版)API使用详解

DeepSeek R1 Distill Llama 70B(免费版)API使用详解 在人工智能领域,随着技术的不断进步,各种新的模型和应用如雨后春笋般涌现。今天,我们要为大家介绍的是OpenRouter平台上提供的DeepSeek R1 Distill Llama 70B&…...

【文件上传、秒传、分片上传、断点续传、重传】

文章目录 获取文件对象文件上传&#xff08;秒传、分片上传、断点续传、重传&#xff09;优化 获取文件对象 input标签的onchange方法接收到的参数就是用户上传的所有文件 <html lang"en"><head><title>文件上传</title><style>#inp…...

LabVIEW与PLC交互

一、写法 写命令立即读出 写命令后立即读出&#xff0c;在同一时间不能有多个地方写入&#xff0c;因此需要在整个写入后读出过程加锁 项目中会存在多个循环并行执行该VI&#xff0c;轮询PLC指令 在锁内耗时&#xff0c;就是TCP读写的实际耗时为5-8ms&#xff0c;在主VI六个…...

树莓派5添加摄像头 在C++下调用opencv

由于树莓派5 os系统升级,正常libcamera创建对象每次失败。 改如下方法成功。 1 创建管道 rpicam-vid -t 0 --codec mjpeg -o udp://127.0.0.1:8554 > /dev/null 2>&1 2 opencv从管道里读取 #include <opencv2/opencv.hpp> #include <iostream>int mai…...

【Redis实战】投票功能

1. 前言 现在就来实践一下如何使用 Redis 来解决实际问题&#xff0c;市面上很多网站都提供了投票功能&#xff0c;比如 Stack OverFlow 以及 Reddit 网站都提供了根据文章的发布时间以及投票数计算出一个评分&#xff0c;然后根据这个评分进行文章的展示顺序。本文就简单演示…...

【开源AI】AI一页一页读PDF

【开源AI】AI一页一页读PDF 可以在这里看 : 让AI 处理 PDF 文件,提取其中的知识点,并生成总结。 只是无法修改,后续若有更新在csdn这里。 【OpenAI】 API 更新: JSON 结构化输出约束机制( JSON Schema) 的一次实战。知识库的JSON Schema形式 每一页都要总结,总结的知识…...

Selenium记录RPA初阶 - 基本输入元件

防止自己遗忘&#xff0c;故作此为记录。 爬取网页基本元件并修改后爬取。 包含元件&#xff1a; elements: dict[str, str] {"username": None,"password": None,"email": None,"website": None,"date": None,"ti…...

第三个Qt开发实例:利用之前已经开发好的LED驱动在Qt生成的界面中控制LED2的亮和灭

前言 上一篇博文 https://blog.csdn.net/wenhao_ir/article/details/145459006 中&#xff0c;我们是直接利用GPIO子系统控制了LED2的亮和灭&#xff0c;这篇博文中我们利用之前写好的LED驱动程序在Qt的生成的界面中控制LED2的亮和灭。 之前已经在下面两篇博文中实现了LED驱动…...

Android studio 创建aar包给Unity使用

1、aar 是什么&#xff1f; 和 Jar有什么区别 aar 和 jar包 都是压缩包&#xff0c;可以使用压缩软件打开 jar包 用于封装 Java 类及其相关资源 aar 文件是专门为 Android 平台设计的 &#xff0c;可以包含Android的专有内容&#xff0c;比如AndroidManifest.xml 文件 &#…...

BurpSuite抓包与HTTP基础

文章目录 前言一、BurpSuite1.BurpSuite简介2.BurpSuite安装教程(1)BurpSuite安装与激活(2)安装 https 证书 3.BurpSuite使用4.BurpSuite资料 二、图解HTTP1.HTTP基础知识2.HTTP客户端请求消息3.HTTP服务端响应消息4.HTTP部分请求方法理解5.HTTPS与HTTP 总结 前言 在网络安全和…...

把DeepSeek接入Word软件,给工作提质增效!

前几天给大家分享了 DeepSeek 的资源包&#xff0c;可能很多人并没有本地部署 DeepSeek 的需求&#xff0c;只想使用它来提高一下工作效率。那今天来分享一下怎么直接在 Word 软件调用 DeepSeek&#xff0c;避免在 Word 软件和网页版 DeepSeek 里来回切换。 ## 前置条件 1、有…...

Linux进阶——web服务器

一、相关名词解释及概念&#xff1a; www&#xff1a;(world wide web)全球信息广播&#xff0c;通常来说的上网就是使用www来查询用户所需的信息。使用http超文本传输协议。 过程&#xff1a;web浏览器向web服务&#xff08;Apache&#xff0c;Microsoft&#xff0c;nginx&…...

QT笔记——多语言翻译

文章目录 1、概要2、多语言切换2.1、结果展示2.2、创建项目2.2、绘制UI2.2、生成“.st”文件2.4、生成“.qm”文件2.5、工程demo 1、概要 借助QT自带的翻译功能&#xff0c;实现实际应用用进行 “多语言切换” 2、多语言切换 2.1、结果展示 多语言切换 2.2、创建项目 1、文件…...

oracle 基础语法复习记录

Oracle SQL基础 因工作需要sql能力&#xff0c;需要重新把sql这块知识重新盘活&#xff0c;特此记录学习过程。 希望有新的发现。加油&#xff01;20250205 学习范围 学习SQL基础语法 掌握SELECT、INSERT、UPDATE、DELETE等基本操作。 熟悉WHERE、GROUP BY、ORDER BY、HAVIN…...