范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

新特性解读

  作者:杨涛涛
  资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、MySQL 相关课程培训等工作。
  本文来源:原创投稿
  *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
  记起来有一次去讲 MySQL 8.0 开发相关特性,在 QA 环节,有人对 MySQL 的几个非常用窗口函数有些困惑,当时现场给了一些示范并且做了详细的解答,今天我用几个简单例子分享下具体的用法。
  有困惑的是这四个窗口函数(其实是因为我PPT里仅写了这四个窗口函数):frist_value、last_value、nth_value、ntile 。
  谈到这四个窗口函数的具体用法,特别是前两个,得先熟悉 MySQL 窗口函数的框架用法。这里提到的窗口函数框架,其实就是定义一个分组窗口的边界,边界可以是具体的行号,也可以是具体的行内容,以这个边界为起点或者终点,来展现分组内的过滤数据。详情见我之前的发稿:https://opensource.actionsky.com/20210125-mysql/
  接下来我们来看看这四个窗口函数如何使用。 first_value: 用来返回一个分组窗口里的第一行记录,也即排名第一的那行记录。
  我们用表t1来示范,这张表里只有12行记录,其中每6行记录按照字段r1来分组。    localhost:ytt_new>select id,r1,r2 from t1;    +----+------+------+    | id | r1   | r2   |    +----+------+------+    |  1 |   10 |   20 |    |  2 |   10 |   30 |    |  3 |   10 |   40 |    |  4 |   10 |   50 |    |  5 |   10 |    2 |    |  6 |   10 |    3 |    |  7 |   11 |  100 |    |  8 |   11 |  101 |    |  9 |   11 |    1 |    | 10 |   11 |    3 |    | 11 |   11 |   10 |    | 12 |   11 |   20 |    +----+------+------+    12 rows in set (0.00 sec)
  比如想拿到每个分组里的第一名(升序),可以用row_number()函数,我们来回顾下:    localhost:ytt_new>select r1,r2 from (select r1,r2,row_number() over(partition by r1 order by r2) as rn from t1) T where T.rn = 1;    +------+------+    | r1   | r2   |    +------+------+    |   10 |    2 |    |   11 |    1 |    +------+------+    2 rows in set (0.00 sec)
  此时如果用first_value来实现,写法会更加简单:       localhost:ytt_new>select distinct r1,first_value(r2) over(partition by r1 order by r2) as first_r2 from t1;       +------+----------+       | r1   | first_r2 |       +------+----------+       |   10 |        2 |       |   11 |        1 |       +------+----------+       2 rows in set (0.00 sec) last_value: 和first_value相反,用来返回分组窗口里的最后一行记录,也即倒数第一的那行记录。
  比如我取出对应分组内最后一行 r2 的值,如果用 last_value 函数,非常好实现,可结果和预期不一致:返回与字段 r2 本身等值的记录。    localhost:ytt_new>select distinct r1,last_value(r2) over(partition by r1 order by r2) "last_r2" from  t1; +------+---------+    | r1   | last_r2 |    +------+---------+    |   10 |       2 |    |   10 |       3 |    |   10 |      20 |    |   10 |      30 |    |   10 |      40 |    |   10 |      50 |    |   11 |       1 |    |   11 |       3 |    |   11 |      10 |    |   11 |      20 |    |   11 |     100 |    |   11 |     101 |    +------+---------+    12 rows in set (0.01 sec)
  究其原因是函数last_value的默认框架是 rows between unbounded preceding and current row 。这里默认框架意思是:限制窗口函数的取值边界为当前行和上限无穷大,所以对应的值就是当前行自己。
  那正确的框架应该是什么样呢?正确的框架应该是让边界锁定整个分组的上下边缘,也即整个分组的上限与下限之间。所以正确的写法如下:    localhost:ytt_new>select distinct r1,last_value(r2) over(partition by r1 order by r2 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as "last_r2" from t1;    +------+---------+    | r1   | last_r2 |    +------+---------+    |   10 |      50 |    |   11 |     101 |    +------+---------+    2 rows in set (0.00 sec) nth_value: 用来返回分组内指定行的记录。
  比如用nth_value函数来求分组内排名第一的记录:    localhost:ytt_new>select * from (select distinct r1,nth_value(r2,1) over(partition by r1 order by r2) "first_r2" from  t1) T where T.first_r2 is not null;    +------+----------+    | r1   | first_r2 |    +------+----------+    |   10 |        2 |    |   11 |        1 |    +------+----------+    2 rows in set (0.00 sec)
  这个函数的功能基本和函数row_number一致。不同的是row_number用来展示排名,而nth_value用来输入排名。 ntile: 用来在分组内继续二次分组。
  比如我想取出分组内排名前50%的记录,可以这样写:    localhost:ytt_new>select id,r1,r2 from (select id,r1,r2, ntile(2) over(partition by r1 order by r2) "ntile    " from t1) T where T.ntile=1;    +----+------+------+    | id | r1   | r2   |    +----+------+------+    |  5 |   10 |    2 |    |  6 |   10 |    3 |    |  1 |   10 |   20 |    |  9 |   11 |    1 |    | 10 |   11 |    3 |    | 11 |   11 |   10 |    +----+------+------+    6 rows in set (0.00 sec)
  这四个窗口函数,特别是 last_value 需要注意。 不过在大多数场景下,记住几个常用的窗口函数即可,比如 row_number(),rank() 等等。

如何将头条中的音乐下载到本地音乐库中?不请自来!下载头条音乐有两种方式第一种手机安装QQ浏览器,首先把你喜欢的音乐或者视频,分享给微信或者QQ好友,然后进微信或者QQ点击,这时会转到一个页面面,点击右上角三个点的地方,为什么美军要淘汰全球最先进的F22隐身战斗机?在美国空军发布的2030年空中优势飞行规划中,人们发现没有了F22A战斗机的名字,美国在2030年空军的建设构想中,把F35F15FA18EFF16战斗机作为主力,都明确了各自担任分手纠缠了2个月,被对方拉黑电话微信,断联一个多月后,突然微信电话恢复正常,是表示对方已经放下了吗?先说说你再说他吧!你肯定没有放下,因为你如果放下了,那人家都拉黑你两个月了之后就算把你从黑名单放出来只要不打电话给你,你也不会知道呀,除非你有试着打过去!就是微信把你从黑名单移出来微型电动车,即将告别两万元时代?动力电池价格上涨传导至车企端,车企的成本压力开始挥之不去,导致国内大批新能源车纷纷涨价。这其中,包括主打性价比的A00级电动车,即微型电动车,也在今年掀起了涨价潮。乘联会数据显示,手机很神奇,竟带计算器手机一个多么神奇的东西早前人们买卖交换东西的时候还没有计算器出现靠得是手算笔算珠算等慢慢的一种新型计算器的出现打破了我们的认知大家像发现新大陆一样好奇手机这玩意竟然带计算器于是乎出蔚来ES7将于5月底发布定位中大型五座纯电SUV近日,蔚来联合创始人秦力洪在蔚来App当中回复询问新车发布的一位网友,旗下蔚来ES7计划于5月底正式发布。新车基于NT2。0平台打造,定位于中大型五座纯电SUV。据秦力洪表示,蔚来关于限塑,还有哪些认识误区和热点领域水生生物和某些陆生动物对塑料垃圾的摄食及相互作用正吸引越来越多的关注,相比之下,陆生植物对塑料颗粒的吸收关注较少。植物是陆地生态系统的基本组成部分,是人类食物的重要来源。那么塑料颗22款特斯拉Model3配置解读,内饰极简,零百加速3。3s,亮点在智驾国产Model3是特斯拉中国出品的一款中型纯电轿车,高性能版百公里加速高达3。3s,主打家用,运动,AP智驾,是特斯拉首款国产车型,直接将特斯拉从进口豪华车身份变成普通百姓家用车,微信和支付宝推出不需要手机的电子公交卡,不同的地区自动生产不同的乘车码可行吗?感谢您的阅读!目前我乘公交车一般有四种形式直接硬币出行通过刷公交卡通过NFC功能刷公交卡通过二维码扫码乘车后两者必须要使用手机,说的透彻点,后两者实际上是电子交通卡。所以,电子交通为什么越来越多人宁愿选择二手机,也不选择买新机?随着智能手机的发展,智能手机市场也是不断扩大,同时也衍生出了二手手机市场,以前很多人对二手手机是嗤之以鼻,但是现在我们发现越来越多的人开始选择二手手机,这是为什么呢?第一二手手机价她曾是流水线工人,31岁创业,55岁身家700亿,公司市值2963亿2017年12月4日,苹果公司总裁库克发文我们拜访了昆山的合作伙伴。他们超一流的工厂,将了不起的精良工艺和细思融入Airpods的制造。董事长王来春女士打造了以人为本的卓越文化,我
苹果取消充电器是真的为了环保吗在2020年iPhone12上,苹果史无前例取消了充电器,苹果还因此被巴西圣保罗州因违反消费者法典被处以近200万美元的罚款。这件事,放在如今已经不是新鲜事,是否是为了环保,大家都孩子上七年级了,闹着要6000多的苹果手机,大家说买还是不买?不买。初中正是努力学习,争取成为能上高中的那50。不能拿手机,充其量打游戏,聊天,很占时间,少了学习的时间,肯定会成绩下滑的咋。看你的经济条件,如果你是土豪可以买给他,因为惯的起。大家苹果手机里面有哪些逆天的App?苹果手机几乎一直占据手机榜首的位置,这不仅依赖其强大的硬件基础,更是得益于是完整的软件生态,在这里,呵呵大家推荐几款强大的ios端软件。1。pdfexpert一款操作简单,功能强大苹果14最新爆料刘海彻底消失,补齐屏幕指纹,还将取消SIM卡?前两天笔者正式入手了iPhone13,给我的第一感觉就是刘海儿怎么还是这么大,不是说明显缩小了吗?但据最新爆料显示,iPhone14系列在外观上将进行更大的改革,很有可能会直接彻底转转手机市场分析双11国产手机围剿苹果,二手市场华为夺国产销冠一年一度的双11电商狂欢节再度落下帷幕,手机赛道也是战报纷飞,国产品牌打了一个漂亮的翻身仗。根据新品电商数据显示,小米和苹果竞争激烈,排名靠前荣耀成为了新晋黑马,取得了销量第三的好第二个华为出现?苹果iPhone13难办了随着国产手机的不断发展,越来越多的国产品牌在行业和市场中都获得了肯定。比如当初遭受冷嘲热讽的华为,当时很多人都不看好麒麟芯片,但结果麒麟芯片成为了市场当中的一匹黑马,也有人不看好O小米成立第二家汽车公司苹果瞄向全自动驾驶企业动态小米成立第二家汽车公司注册资本10亿元雷军为法定代表人蓝鲸财经据报道,天眼查App显示,小米汽车科技有限公司成立,法定代表人为雷军,注册资本10亿元。该公司经营范围含新能源调音小栈怎样从一个小白开始学习声卡调试直播效果先说一下,声卡调试只是当前网络环境下的一个产物。如果你什么都不懂,小自一个,你可以参考一下,小编在此分享一些经验吧,小编也是从小白来的,咱们就欢零开始。需要的工具1电脑,2声卡,36400W像素66W超级快充加持,荣耀Play5凭借出色表现感动用户朋友前言智能手机发展到今天,刘海挖孔升降水滴以及即将发布的屏下摄像新机,其设计理念可以说款式花样繁多,我们消费者朋友可以根据自己的需求去选取。但一款手机除了用来拨打电话上网等,系统体验从logo设计谈企业品牌战略与设计的意义?logo代表一个企业的象征,以及一个企业的对外形象。设计logo的主要目的是提高企业知名度,让企业形象得到提升,和同行进行清楚的区分。logo意义就是品牌价值企业文化和独特的个性。编程语言哪个好入门?新手应该怎么判断?0基础学编程选哪种语言好?那需要先定义一下你所谓的好是什么,说明白这个,才可能做出合适的选择。所以,接下来我根据这个不同的好,给出建议。01hr如果你说的好是指入门难度低即,你想要