SQL查询语句应该避免的五个错误
今日份知识你摄入了么?
SQL和机器学习有一些相似之处 。 它们都不需要大量的编程 , 所以上手比较容易 , 而且代码也很少会崩溃 。
本文插图
与SQL和机器学习相关推文
我认为 , SQL很难崩溃会让数据分析变得更加困难 。 比如从数据库中提取数据集 , 结果却发现了数据错误或缺失数据 , 这种情况出现的次数有多少呢?答案是:相当多!
但如果SQL在错误时直接崩溃 , 我反而很容易知道自己犯错了 。 因为SQL查询一定会返回结果 , 而这些结果就需要数据科学家花费大量时间进行数据的验证 。
本文插图
图源:krakenimages, 摘自Unsplash
所以在编写SQL查询时 , 以下五种错误是你应该注意的 。
01
不清楚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的实际功能
本文插图
使用SUM窗口函数进行转换的示例
第一次遇到Window Functions时 , 我觉得很神奇 。 为什么把Window Functions作为GROUP BY用的时候 , 可以聚合数据呢?
其实 , 在设计查询时 , Window Function(WF)简化了很多操作:
- WF能访问当前记录前后的记录 , 具体参见Lead和Lag函数 。
- WF可以用GROUP BY对已经聚合的数据执行额外的聚合 。 请看上图中的例子 , 我用了WF计算销售额 。
- 飞利浦·斯塔克|MySQL统计总数就用count,别花里胡哨的《死磕MySQL系列 十》
- MySQL|终于跑路了!三星关停越南工厂,欲将产能转移至他国
- MySQL|vivo X80、NEX5、S12曝光 搭载天玑和骁龙旗舰芯
- 雅虎|TDSQL破圈背后:国产数据库加速出击
- 数据库|原来这才是Python连接mysql数据库的正确姿势!(一)
- 删除|什么?还在用delete删除数据《死磕MySQL系列 九》
- MySQL|红米K50新机全面曝光,骁龙898+百瓦快充+柔性直屏,米粉期待已久
- 数据库|11 月数据库排行榜:PostgreSQL 充钱了、三巨头分数持续低迷
- 苹果|mysql安装教程--mac 怎么安装mysql?
- 游戏本|最全面mysql如何查询表信息大全!赶快来试试!(上)