书中隐藏的 SQL 开窗函数秘密,ChatGPT 找到了

文章讲述了T-SQL开窗函数在数据分析和ETL过程中的重要性,以及如何使用工具如AskYourPDF来辅助理解和优化代码。通过示例展示了如何将窗口定义重用以简化脚本,提高代码可读性,并提及SQLServer中相关语法的兼容性要求。
摘要由CSDN通过智能技术生成

平时写出这份 T-SQL 的开窗函数脚本,大多数开发者都会引以为傲了:

SELECT empid, ordermonth, qty, 
  SUM(qty) OVER (PARTITION BY empid 
                 ORDER BY ordermonth 
                 ROWS BETWEEN UNBOUNDED PRECEDING 
                          AND CURRENT ROW) AS run_sum_qty, 
  AVG(qty) OVER (PARTITION BY empid 
                 ORDER BY ordermonth 
                 ROWS BETWEEN UNBOUNDED PRECEDING 
                          AND CURRENT ROW) AS run_avg_qty, 
  MIN(qty) OVER (PARTITION BY empid 
                 ORDER BY ordermonth 
                 ROWS BETWEEN UNBOUNDED PRECEDING 
                          AND CURRENT ROW) AS run_min_qty, 
  MAX(qty) OVER (PARTITION BY empid 
                 ORDER BY ordermonth 
                 ROWS BETWEEN UNBOUNDED PRECEDING 
                          AND CURRENT ROW) AS run_max_qty 
FROM Sales.EmpOrders;

知道开窗函数能解决很多有趣的问题,比如排名,排班,去重等等。但很多场景,也不是都有机会去体验

所以更多的,开窗函数对于开发者来说,是个神秘的武器。能有机会写出上面的脚本,所在的领域和数字交易一定结合得非常紧密,电商,银行,证券

但是,作为数据分析师,ETLer, 这些再普通不过,甚至是必备技能,仅仅满足写出来,未免对自己要求有点低。

怎么去优化,写得更有调理,更简洁,始终要放在备忘录里

可,上面的 SQL 还要怎么优化呢,怎么写得更简洁呢?其实我也不知道。直到今天,我尝试用 AskYourPDF 这么一款 ChatGPT Plugin 我才恍然一悟

说起 T-SQL 开窗函数,那就不得不提这本书《

microsoft-sql-server-2012-high-performance-t-sql-using-window-functions


291a83dac195f6727ebff9396ebcf9af.png

你要买的话,一定认准了,作者是 Ben 大叔

fbf50cdb7c56cfb685990a10c397ae94.png

我拿到这本书的 PDF 版本,想着页数不多,要不请 ChatGPT 帮我读一读。于是我就裁剪了第一章,丢给 AskYourPDF

有个前提,AskYourPDF 是个阅读 PDF 的插件,它的极致能支持 200页 PDF, 所以我首先用一款免费的在线分割 PDF 软件,将它第一章给切下来:

347e62575888cca949c96a16be085c03.png

注意,这里极力推荐这款软件,它是免费的,网址在这里:

https://www.ilovepdf.com

接着,我把这份切割好的 PDF,上传到 AskYourPDF 官网

1b388fdbc8ccdd066e690bd9d7b96df9.png

官网:https://askyourpdf.com/upload

前面我试过 ChatWithPDF, 好用是好用:

如何用 ChatGPT 帮你10分钟读完数据库论文 <- 戳它了解

但如果我要用本地文件,就比较抓狂,需要把 PDF 上传到一个可以被 ChatGPT 访问到的地方,试过很多服务,都不行

最终还是自带接收 PDF 的 AskYourPDF 。把 PDF 上传,记住 上图中 2 标注的文档 ID。在与 ChatGPT 对话时,告诉它这个 ID,即可:

59dc9d14fe1c676ecc50857c6a82e115.png

别忘记启用 AskYourPDF 插件

da481199545d81f625c975e5ca8706bd.png

我请 ChatGPT 总结这一章的内容,于是就出现了开头的例子。

我注意到总结时,它说到“窗口定义的重用”,我就很好奇,追问下去,它给出了文档中的例子:

dad2d870db3f08ff1ee3ff1478eab4a5.png

最终,代码是这样的:

SELECT empid, ordermonth, qty, 
  SUM(qty) OVER W1 AS run_sum_qty, 
  AVG(qty) OVER W1 AS run_avg_qty, 
  MIN(qty) OVER W1 AS run_min_qty, 
  MAX(qty) OVER W1 AS run_max_qty 
FROM Sales.EmpOrders 
WINDOW W1 AS ( PARTITION BY empid 
               ORDER BY ordermonth 
               ROWS BETWEEN UNBOUNDED PRECEDING 
                        AND CURRENT ROW );

是不是看着舒服多了?

求证下 SQL Server 官网:

8c7a77e4efd09853ab559028822ebe00.png

确有此语法,但需将 SQL Server 兼容性级别提到 160

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dbLenis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值