SQL查询语句应该避免的五个错误


今日份知识你摄入了么?
SQL和机器学习有一些相似之处 。 它们都不需要大量的编程 , 所以上手比较容易 , 而且代码也很少会崩溃 。
SQL查询语句应该避免的五个错误
本文插图
与SQL和机器学习相关推文
我认为 , SQL很难崩溃会让数据分析变得更加困难 。 比如从数据库中提取数据集 , 结果却发现了数据错误或缺失数据 , 这种情况出现的次数有多少呢?答案是:相当多!
但如果SQL在错误时直接崩溃 , 我反而很容易知道自己犯错了 。 因为SQL查询一定会返回结果 , 而这些结果就需要数据科学家花费大量时间进行数据的验证 。
SQL查询语句应该避免的五个错误
本文插图
图源:krakenimages, 摘自Unsplash
所以在编写SQL查询时 , 以下五种错误是你应该注意的 。
01
不清楚SQL执行的顺序
【SQL查询语句应该避免的五个错误】
SQL查询语句应该避免的五个错误
本文插图
SQL 查询执行顺序
SQL的使用门槛很低 。 在你编写查询时 , 如果能用JOIN进行一些分组 , 很多人都会觉得你已经是专家了 。
但是 , 这些所谓的专家知道SQL查询是按什么顺序执行的吗?
SELECT是在编写时在编辑器中执行的 , 但数据库并不是这样 , 所以SQL查询其实并不是从SELECT开始的 。
数据库是从FROM和JOIN开始执行查询的 。 这也就解释了为什么我们可以用WHERE来使用已经JOIN过的表格 。
那为什么我们不能过滤掉WHERE中的GROUP BY呢?这是因为 , GROUP BY是在WHERE之后执行的 , 所以我们还需要下一步:HAVING 。
最后 , 运行SELECT 。 它选择了要包括的列 , 定义了要计算的聚合函数 。 另外 , Window Functions也在这里执行 。
这就是为什么当我们尝试在WHERE中使用Window Function的输出进行过滤时 , 会出现错误 。
请注意 , 数据库是利用查询优化器 (query optimizer)来优化查询执行的 。 优化器可能会改变某些操作的顺序 , 让查询运行更快 。 但这是一些幕后的高级概念 。
02
Window Functions的实际功能
SQL查询语句应该避免的五个错误
本文插图
使用SUM窗口函数进行转换的示例
第一次遇到Window Functions时 , 我觉得很神奇 。 为什么把Window Functions作为GROUP BY用的时候 , 可以聚合数据呢?
其实 , 在设计查询时 , Window Function(WF)简化了很多操作: