SQL之每天一个小函数

SQL-窗口函数进阶用法:ntile(),percent_rank(),cume_dist() ntile(),percent_rank(),cume_dist() 阅读详情

Ntile函数使用

函数解释:
可以看成是:它把有序的数据集合平均分配到指定的数量(num)个桶中, 将桶号分配给每一行。如果不能平均分配,则优先分配较小编号的桶,并且各个桶中能放的行数最多相差1。(这个算法在很多当中使用,spark中数据分片的时候也是这个算法,只不过是不均匀的时候,优先分配给较大编号的分片)
语法是:ntile (num) over ([partition_clause] order_by_clause) as your_bucket_num
然后可以根据桶号,选取前或后 n分之几的数据。
数据会完整展示出来,只是给相应的数据打标签;具体要取几分之几的数据,需要再嵌套一层根据标签取出。

例如 : 有表如下

±---------±---------±--------------±-------±-+
| t1.name | t1.cost | t1.orderdate | t1.cn |
±---------±---------±--------------±-------±-+
| jack | 10 | 2017-01-01 | 1 |
| tony | 15 | 2017-01-02 | 1 |
| tony | 29 | 2017-01-04 | 1 |
| jack | 46 | 2017-01-05 | 2 |
| tony | 50 | 2017-01-07 | 2 |
| jack | 55 | 2017-01-08 | 2 |
| jack | 23 | 2017-02-03 | 3 |
| jack | 42 | 2017-04-06 | 3 |
| mart | 62 | 2017-04-08 | 3 |
| mart | 68 | 2017-04-09 | 4 |
| mart | 75 | 2017-04-11 | 4 |
| mart | 94 | 2017-04-13 | 4 |
| neil | 12 | 2017-05-10 | 5 |
| neil | 80 | 2017-06-12 | 5 |
±---------±---------±--------------±-------±-+
##需求为查询前20%时间的订单信息

内层SQL如下:

select name,cost,orderdate,
ntile(5) over(order by orderdate ) cn 
from business;

拿到的结果为
±------±------±------------±----±-+
| name | cost | orderdate | cn |
±------±------±------------±----±-+
| jack | 10 | 2017-01-01 | 1 |
| tony | 15 | 2017-01-02 | 1 |
| tony | 29 | 2017-01-04 | 1 |
| jack | 46 | 2017-01-05 | 2 |
| tony | 50 | 2017-01-07 | 2 |
| jack | 55 | 2017-01-08 | 2 |
| jack | 23 | 2017-02-03 | 3 |
| jack | 42 | 2017-04-06 | 3 |
| mart | 62 | 2017-04-08 | 3 |
| mart | 68 | 2017-04-09 | 4 |
| mart | 75 | 2017-04-11 | 4 |
| mart | 94 | 2017-04-13 | 4 |
| neil | 12 | 2017-05-10 | 5 |
| neil | 80 | 2017-06-12 | 5 |
±------±------±------------±----±-+
这样结果就很明显了,需要前20%只需要选取cn=1的数据即可.

最终SQL为:

select * from(
select name,cost,orderdate,
ntile(5) over(order by orderdate ) cn 
from business ) t1 
where t1.cn =1; 

代码解释:
内层函数中将表中数据分为5份 { ntile(5) } 并根据 orderdate 进行降序排列后选择所需要的信息
显示结果为:
±---------±---------±--------------±-------±-+
| t1.name | t1.cost | t1.orderdate | t1.cn |
±---------±---------±--------------±-------±-+
| neil | 80 | 2017-06-12 | 1 |
| neil | 12 | 2017-05-10 | 1 |
| mart | 94 | 2017-04-13 | 1 |
±---------±---------±--------------±-------±-+

牛客-SQL篇-非技术快速入门-05必会的常用函数-日期函数-SQL28计算用户8月每天的练题数量 INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学',4.0,15,5,25);INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学',3.8,20,15,70);INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学',3.4,7,2,12);题目:现在运营想要计算出。 阅读详情

相关推荐

牛客-SQL篇-SQL基础进阶-09技能专项-窗口函数-技能专项-窗口函数-VQ25查询每天刷题通过数最多的前二名用户id和刷题数?

现有牛客刷题表`questions_pass_record`,请查询每天刷题通过数最多的前二名用户id和刷题数,输出按照日期升序排序,查询返回结果名称和顺序为。

SunshineLu2019的博客 155

SQL随机分组与随机平均分组----ntile(组数) over(partition by 字段1 order by 字段2)

今天发现一个函数,ntile 直接看代码吧 select t.classno ,t.sno,t.score ntile(5) over(partition by classno order by t.sno) as ntile from t_score t order by ntile 意思:根据 classno 分组后再进行每个相同classno的集合尽量地平均分5组。 例如:一

肥货 1万+

从原理到实践:手把手教你用XY2-100协议控制激光振镜(含引脚定义图)

本文详细解析了XY2-100协议在激光振镜控制中的应用,从硬件接口定义到时序分析,再到Verilog硬件逻辑实现,提供了完整的开发指南。通过实际案例和优化策略,帮助开发者快速掌握高精度激光振镜控制技术,提升加工质量和效率。

weixin_30505225的博客 399

【SQL面试】MySQL的NTILE函数使用

MySQL的NTILE函数使用 MySQL的NTILE函数用于将一个数据集分成n个分组,每个分组中包含尽可能相等数量的行。该函数返回一个数字,该数字表示该行属于的分组号。 NTILE函数在ORDER BY子句中指定排序的列,然后将结果集按照该列的值从小到大或从大到小进行排序。然后,将排序后的结果集分成指定数量的组。NTILE函数为每个行分配一个组号,表示该行属于哪个组。 以下是NTILE函数的语法: NTILE(n) OVER ( [PARTITION BY&nbsp

gzjgzj12345的博客 1851

薛定谔 | 先导化合物优化与相互作用可视化

当获得针对某个靶点的先导分子后,想要在此基础上进行化学结构修饰。为了提升化学改造的成功率可以采用本教程方法进行结构虚拟改造/优化。每用薛定谔处理一个新任务,第一步必须创建新的project以方便日后管理。选项卡中修改工作路径(可以方便地找到输出文件)

药研猿的博客 2143

学习stm32H7之路开始(STM32H7系列1) 前期准备,HAL库框架

2020.01.07 几个重要的参考网址 1.电子工程世界网 http://tags.eeworld.com.cn/tags/STM32H7 链接: link. 2.转:https://blog.youkuaiyun.com/simon223/article/list/2?t=1 链接: link. ———————————————— 版权声明:本文为优快云博主「Simon223」的原创文章,遵循 CC 4....

kengkengkeng963的博客 3408

HIVE 窗口函数之 ntile()

先看一个案例: 下面是一张订单表 要求:查询前 20%时间的订单信息 SQL语句: select * from ( select name,orderdate,cost, ntile(5) over(order by orderdate) sorted from business ) t where sorted = 1; 结果: 探索: 试图查找ntile( )函数的解释: 将ntile( ) 中的数字改为3,即ntile(3),结果如下图: 数..

克里斯的博客 3386

告别密码烦恼:用Windows Server NPS给公司Wi-Fi和有线网加一道MAC地址白名单(附H3C交换机配置)

本文详细介绍了如何利用Windows Server NPS(网络策略服务器)与H3C交换机实现MAC地址白名单认证,为企业Wi-Fi和有线网络提供零密码安全方案。通过配置NPS服务器、网络策略及H3C交换机联调,实现无感知认证体验,降低运维负担,同时满足审计追溯需求。适用于中小企业网络管理,提升安全性与便捷性。

weixin_42535703的博客 365

hive窗口函数分组排序并取第一个值_Hive常用窗口函数汇总

目录:1,LAG2.LEAD3,FIRST_VALUE4.LAST_VALUE5.RANK(),DENSERANK(),ROW_NUMBER()【最常用的】6.ntile()一、LAGLAG(col,n,DEFAULT) 用于统计窗口内往上第n行值第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)二、LEA...

weixin_39816362的博客 2032

FPGA驱动OV5640:从SCCB协议到图像数据采集的实战解析

本文详细解析了使用FPGA驱动OV5640摄像头模组的完整流程,从SCCB协议通信、寄存器配置到图像数据采集。重点阐述了SCCB(与I2C类似)协议的实现细节、关键的上电复位时序,以及如何通过状态机解析视频流时序并捕获图像数据,为嵌入式视觉开发提供了实战指南。

weixin_29191761的博客 187

打开电脑自动弹窗问题:无法为文件‘D:\Config.Msi\*.rbf‘设置文件安全。错误:5。请确认...如何解决?| 提供多种解决方案,亲测有效!

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 2908

关于计算每天月累计的SQL语句的写法---开窗函数(窗口函数)的应用

关于计算当年每个月年累计的SQL语句的写法 例如有一个表的值为 month value 202001 6 202002 10 202003 9 202004 11 我想获得的结果为 month value 202001 6 202002 16 202003 25 202004 36 select TMP1.month,sum(TMP2.VALUES) from TKDW.TABLE1 TMP1, TKDW.TABLE1 TMP2 where TMP1.month>=TMP2.month--计算当

qq_32389231的博客 5792

uniapp(微信小程序) - 实现uniapp小程序电子签名板,横屏手写姓名签名专用写字画板,客户专用签字板,手写签名签字画板组件,手写签名,(详细运行示例,一键复制开箱即用)

uniapp实现微信小程序的电子签名效果,uniapp微信小程序 电子签名 写字板,用uniapp实现微信小程序的电子签名,uniapp微信小程序canvans实现手写签名,记录一个uniapp写的小程序的手写板,横屏,用于签名,unniapp实现电子签名,uniapp怎么做横屏的手写签名,uniapp如何实现签字板,uniapp小程序平台下怎么做电子签名板组件,uniapp电子签名插件,uniapp最好用的电子写字板插件组件源码,实现uniapp 手写签名功能,手写板、签字板,uni-app插件市场最好的

✅ 精选推荐文章 1万+

sql之每天一个小函数之几个实用小函数

今天讲 业务中常见的处理连续活跃同类型问题 这类问题常用的函数为lag窗口函数,datadiff日期函数等,今天就介绍这两类函数 lag与lead函数可以返回上下行的数据 语法:lead(col,n,default) 用于统计窗口内往下第n行值 第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL) 日期比较函数: datediff 语法: datediff(string enddate, string startdat

夜归人的博客 320

Vue3 - 详解实现网站接入钉钉扫码登录功能,钉钉授权生成登录二维码用户用手机扫描二维码登陆,支持弹框式、浏览器单独新开页显示,钉钉扫描二维码登录详细流程及示例代码,最新vue集成钉钉扫码授权登录!

vue3,nuxt3,钉钉,扫码登录,vue3钉钉扫码登陆,钉钉授权第三方WEB网站扫码登录功能,钉钉扫码登录第三方网站,单点登录,二维码不显示,报错,扫了没反应,出错,vue3钉钉扫码登录,内嵌,获取个人信息,pc网页钉钉登录,钉钉扫码登录怎么新开一页,跳页显示二维码,内嵌登录二维码,iframe新页面弹出,弹出一个小窗口显示登录二维码,登录报错,扫码没反应,解决手机点登录报错没反应,官方文档,手机扫描钉钉二维码登录网站,页面弹出一个小窗口而不是打开一个页面,vue3中使用iframe实现另开小窗口扫码登

🏆 前端领域优质创作者 3692

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

sql之每天一个小函数

sql中我们经常会用到聚合函数,聚合之后它会减少数据量,但是如果我们想把聚合之后的数据和原始数据同时展示出来,那么我们需要用到窗口函数。 lag窗口函数通过条件把数据划分成子类,在子类中进行排序 格式 lag(list_name,num) over(partition by ___ order by ) 实例: 原始数据: +----------------+---------------------+----------------+--+ | business.name | business.ord

夜归人的博客 151

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

每天一篇SQL[2]——聚合函数

上期回顾 SELECT执行顺序 (8)SELECT (9)DISTINCT <top num> <select list> (1)FROM left_table (3)<join type> JOIN <right_table> (2)ON [join_condition] (4)WHERE where_condition (5)GROUP ...

qq_24292711的博客 186

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SQL----每天一个小函数之常用函数汇总四

复合类型构建操作 1、Map类型构建: map 语法: map (key1, value1, key2, value2, …) 说明:根据输入的key和value对构建map类型 hive> Create table iteblog as select map(‘100’,‘tom’,‘200’,‘mary’) as t from iteblog; hive> describe iteblog; t map<string ,string> hive> select

夜归人的博客 2882

SQL----每天一个小函数之常用函数汇总一

最近没怎么更新,主要是没时间造数据,公司的业务数据出于保密考虑也不好拿出来用,所有只能抽时间总结了一部分sql函数,看到的人可以收藏转发,整理不易,一键三连吧筒子们! 内容太多,分三部分发吧 关系运算 1、等值比较: 语法:A=B 操作类型:所有基本类型 描述: 如果表达式A与表达式B相等,则为TRUE;否则为FALSE hive> select 1 from iteblog where 1=1; 2、不等值比较: <> 语法: A <> B 操作类型: 所有基本类型 描述:

夜归人的博客 250

SQL----每天一个小函数之常用函数汇总二

数值计算 1、取整函数: round 语法: round(double a) 返回值: BIGINT 说明: 返回double类型的整数值部分 (遵循四舍五入) hive> select round(3.1415926) from iteblog; 3 hive> select round(3.5) from iteblog; 4 hive> create table iteblog as select round(9542.158) from iteblog; hive> desc

夜归人的博客 483

SQL----每天一个小函数之常用函数汇总三

条件函数 1、If函数: if 语法: if(boolean testCondition, T valueTrue, T valueFalseOrNull) 返回值: T 说明: 当条件testCondition为TRUE时,返回valueTrue;否则返回valueFalseOrNull hive> select if(1=2,100,200) from iteblog; 200 hive> select if(1=1,100,200) from iteblog; 100 2、非空查找函数:

夜归人的博客 356

sql月度汇总_【转】SQL语句统计每天、每月、每年的数据

原文:https://www.cnblogs.com/fooo/p/3435687.htmlsql语句统计每天、每月、每年的数据1、每年select year(ordertime) 年,sum(total) 销售合计from 订单表group by year(ordertime)2、每月select year(ordertime) 年,month(ordertime) 月,sum(total) 销...

weixin_31100713的博客 2326

【牛客刷题--SQL篇】必会的常用函数日期函数SQL28 计算用户8月每天的练题数量

必会的常用函数日期函数SQL28 计算用户8月每天的练题数量

80后大叔爱学习 781

SQL VQ13 统计每天总刷题数

题目 : https://www.nowcoder.com/practice/4856eb2785544c029da140ee0f60c0ba?tpId=341 需求 统计每天 days 总刷题数 passCnt查询结果 : 解决 思路 :

记录点点滴滴 634

java按类型统计一年每月数据_【转】SQL语句统计每天、每月、每年的数据

原文:https://www.cnblogs.com/fooo/p/3435687.htmlsql语句统计每天、每月、每年的数据1、每年select year(ordertime) 年,sum(total) 销售合计from 订单表group by year(ordertime)2、每月select year(ordertime) 年,month(ordertime) 月,sum(total) 销...

weixin_36212050的博客 1803

sql月度汇总_SQL语句统计每天、每月、每年的 数据

1、每年select year(ordertime) 年,sum(Total) 销售合计from 订单表group by year(ordertime)2、每月select year(ordertime) 年,month(ordertime) 月,sum(Total) 销售合计from 订单表group by year(ordertime),month(ordertime3、每日select ye...

weixin_42501704的博客 5425
下一篇: sql之每天一个小函数
是番茄鱼啊
博客等级 码龄6年 3粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值