数据蒋堂 | 有序遍历语法

简介:

上一期数据蒋堂为你介绍遍历运算中的可能情况,并讨论SQL语法在这方面的表现:

数据蒋堂 | 常规遍历语法

这期我们将继续讨论遍历运算的语法规则。

image

image

SQL延用了数学上的无序集合概念,遍历时也不关注次序。但计算机只能一步步地执行(暂先不考虑并行计算的情况),而遍历集合时总会有个次序,充分利用这个次序就可以方便地表达更丰富的计算需求。

比如我们想从一个集合取出半数成员构成新集合。这看起来象是过滤运算,但过滤条件和集合成员本身并没有关系,而是由遍历成员时的次序号决定的。

只有~写法无法方便地描述出这种运算,这时候还需有个符号(标识符)来表示遍历的次序号。

事实上,大部分高级语言在写循环语句时都会有个循环变量来表示次序号。但许多集合化语言中并没有提供这个机制,如果碰到这种运算就只能再写循环才能完成,如此就显得很繁琐。SQL也没有表示遍历次序后的方案,只能先用子查询人为制造一个序号出来,再针对这个序号进行过滤。

我们用#来表示遍历的次序号,那么这个运算就很容易写了:

image

对应地,在过滤运算中我们总是返回满足条件的成员,但有时候我们并不关心具体成员而只关心成员的次序号,那么我们还有必要设计返回次序号的过滤函数:

image

类似地,还可能有:

image

考虑到遍历的次序时,我们还可以进一步丰富计算的描述能力。

比如有个问题是“12个月的销售额数据已经按次序准备好,要计算哪些月份的增长率超过了5%”。

SQL很难写这种跨行计算,所以需要用JOIN语句或窗口函数把上月数据和本月数据对齐,然后再来计算增长率,这不可避免地用到子查询。

假设我们提供了相邻成员的引用语法,就可以很容易描述这个计算了。

比如用[i]表示和当前成员距离为i的成员,再结合前述的#写法,上面的计算就可以写成:

image

~[-1]表示前一个成员,也就是上月销售额。找出把增长率超过5%的月份(也就是#),其它月份清0,最后选出这些非0的月份。

如果用上述的返回次序号的过滤函数,还可以写成更简单的形式:

image

除了相邻成员外,还可能有相邻集合的引用。比如还是上面的集合,我们希望计算前后各一个月的销售额移动平均值。

把[i]表达式扩展成[a,b]写法来表示相邻成员构成的集合,这个运算就很容易描述了:

image

相邻集合还可能有更复杂的情况,比如计算到当月的累积销售额。

允许[a,b]写法中a缺省表示从第一个成员开始(对等地,b缺省可以理解为最后一个成员),这个运算可以写成

image

同样的,面向结构化数据计算也还可以直接使用字段名,比如如果例子中的集合是由“月份”和“销售额”的两个字段构成的表,则上述的运算可以分别写成:

image

考虑到有序遍历时的语法规则就比常规遍历要复杂许多,并且这些有序遍历也是实际计算中经常发生的,如果遍历语法不支持,会导致这些计算难以描述,程序员就要再编写多行循环语句,繁琐且影响可读性。

SQL没有提供有序遍历的语法,经常需要使用子查询和窗口函数来生成序号,某些复杂些的有序遍历运算甚至写不出来,所以需要用存储过程手段转换成多行循环语句才可以。从这个意义讲,SQL虽然是集合化语言,但集合化不够彻底。

image

清华大学计算机硕士,著有《非线性报表模型原理》等,1989年,中国首个国际奥林匹克数学竞赛团体冠军成员,个人金牌;2000年,创立润乾公司;2004年,首次在润乾报表中提出非线性报表模型,完美解决了中国式复杂报表制表难题,目前该模型已经成为报表行业的标准;2014年,经过7年开发,润乾软件发布不依赖关系代数模型的计算引擎——集算器,有效地提高了复杂结构化大数据计算的开发和运算效率;2015年,润乾软件被福布斯中文网站评为“2015福布斯中国非上市潜力企业100强”;2016年,荣获中国电子信息产业发展研究院评选的“2016年中国软件和信息服务业十大领军人物”;2017年, 自主创新研发新一代的数据仓库、云数据库等产品即将面世。

image

《数据蒋堂》的作者蒋步星,从事信息系统建设和数据处理长达20多年的时间。他丰富的工程经验与深厚的理论功底相互融合、创新思想与传统观念的相互碰撞,虚拟与现实的相互交织,产生出了一篇篇的沥血之作。此连载的内容涉及从数据呈现、采集到加工计算再到存储以及挖掘等各个方面。大可观数据世界之远景、小可看技术疑难之细节。针对数据领域一些技术难点,站在研发人员的角度从浅入深,进行全方位、360度无死角深度剖析;对于一些业内观点,站在技术人员角度阐述自己的思考和理解。蒋步星还会对大数据的发展,站在业内专家角度给予预测和推断。静下心来认真研读你会发现,《数据蒋堂》的文章,有的会让用户避免重复前人走过的弯路,有的会让攻城狮面对扎心的难题茅塞顿开,有的会为初入行业的读者提供一把开启数据世界的钥匙,有的甚至会让业内专家大跌眼镜,产生思想交锋。

原文发布时间为:2017-09-15
本文作者:蒋步星
本文来自云栖社区合作伙伴“数据派THU”,了解相关信息可以关注“数据派THU”微信公众号

相关文章
|
3月前
|
网络架构
配置BGP的MED属性控制路由选择
本文介绍了通过配置BGP的MED属性实现流量路径控制的需求与方法。网络中,AR1位于AS65008,AR2和AR3位于AS65009,AR1与AR2、AR3运行EBGP,AR2与AR3间运行IBGP。目标是使从AS65008到AS65009的流量优先通过AR3。配置思路为:通过增大AR2发送给AR1的MED值,使AR1选择AR3作为流量入口。操作步骤包括IP地址配置、BGP协议配置及MED属性设置,并通过路由表验证配置效果。最终实现流量按需优化路径选择。
配置BGP的MED属性控制路由选择
抖音抢拍神器app, 直播间抢购神器,抢单加速器永久免费版
这是一款针对抖音直播间秒杀抢购的辅助软件源码,可帮助用户在多人同时抢购时提高成功率。功能包括自定义抢拍数量、速度及定时设置,通过模拟点击实现商品购买流程。
|
存储 关系型数据库 数据库
初探PostgreSQL体系结构
初探PostgreSQL体系结构
236 0
|
9月前
|
安全 Java 数据安全/隐私保护
基于内存认证的 Spring Security
通过本文的介绍,希望您能够深入理解基于内存认证的Spring Security配置与使用方法,并能够在实际开发中灵活应用这一技术,提升应用的安全性和用户体验。
171 9
|
10月前
|
域名解析 网络协议 安全
|
10月前
|
JSON BI API
商城上货API接口的实战案例
在商城上货过程中,API接口扮演着至关重要的角色。以下是对商城上货API接口的实战分析,涵盖其主要功能、类型、安全性以及实战案例等方面。
|
9月前
|
分布式计算 DataWorks 搜索推荐
DataWorks产品评测:大数据开发治理平台的最佳实践与体验
DataWorks是阿里云推出的一款大数据开发治理平台,集成了多种大数据引擎,支持数据集成、开发、分析和任务调度。本文通过用户画像分析的最佳实践,评测了DataWorks的功能和使用体验,并提出了优化建议。通过实践,DataWorks在数据整合、清洗及可视化方面表现出色,适合企业高效管理和分析数据。
323 0
|
12月前
|
机器学习/深度学习 人工智能 算法
人工智能在艺术创作中的创新应用:机器创作的未来
【9月更文挑战第25天】 人工智能在艺术创作中的创新应用,不仅为艺术家们提供了全新的创作工具和媒介,更在创作理念、艺术形态等方面带来了深刻的变革。随着技术的不断发展和完善,机器创作将在未来展现出更加广阔的发展前景。我们期待在人工智能的助力下,艺术创作能够迎来更加繁荣和多元的未来。
|
算法 数据安全/隐私保护
基于LS算法的OFDM+QPSK系统信道估计均衡matlab性能仿真
基于MATLAB 2022a的仿真展示了OFDM+QPSK系统中最小二乘(LS)算法的信道估计与均衡效果。OFDM利用多个低速率子载波提高频谱效率,通过循环前缀克服多径衰落。LS算法依据导频符号估计信道参数,进而设计均衡器以恢复数据符号。核心程序实现了OFDM信号处理流程,包括加性高斯白噪声的加入、保护间隔去除、快速傅立叶变换及信道估计与均衡等步骤,并最终计算误码率,验证了算法的有效性。
340 2
|
编解码 安全 Windows
如何解决Windows电脑自动黑屏问题?
【8月更文挑战第19天】以下是可能导致Windows电脑自动黑屏的原因及解决方法:硬件问题包括显示器连接不良、显卡故障(如风扇不转或驱动过时)、内存条接触不良、CPU过热及电源供应不稳定。软件问题涉及系统故障(尝试系统还原或运行SFC扫描)、显卡驱动不兼容、软件冲突或恶意软件感染。此外,不当的电源管理和显示设置也可能引发黑屏。针对这些问题,采取相应的检查和修复措施通常可以解决问题。
716 0

热门文章

最新文章