SQL是数据分析中最高频的操作之一,本文梳理常见的SQL错误,可以归为三大类:

  • 语法类;
  • 函数类;
  • 逻辑类;

语法错误

标点错漏

e.g. 逗号多或缺,引号、括号等不成对,多余的空格等;

e.g. case when … end函数,有时候少写end

e.g. select含有 聚合函数(count, sum, avg)时,相应字段都要放入group by 后面;

重命名

如果有子查询,那么需要对子查询进行重命名;

表的重命名

数据拼接

名称、类型、顺序一致

e.g. union all时要求字段的名称和顺序都要保持一致;

e.g. join操作会要求两边的字段格式一致

null值

  • 正常的数值和null值做四则运算,得到的结果还是null,建议用isnull,coalesce之类的函数将null值转化为0,或者筛选条件中过滤null值;
  • sum/avg(case when 操作时要加 else 0 不然会出现null的情况;
  • join 操作是最常见的出现null的情形;
  • 如果关联表中存在null值,join操作的时候可能会因为null值产生数据倾斜。

逻辑顺序

e.g. between 最小值 and 最大值, 注意最小值在前,最大值在后

函数错误

参数的数量

e.g. 某函数需输入2个参数,结果只有1个

参数的格式

e.g. to_date(string timestamp)select to_date('20161125') 返回值为null,因为数据格式不是日期时间

逻辑错误

数据重复

对于存在一对多关系的数据表关联后会产生数据重复,这种重复对于sum/avg等数值计算操作有影响,对count(distinct *)操作是没有影响的

e.g. 一张母订单可以对应多张子订单;

e.g. 一个用户可以对应多条交易记录;

无效筛选

隐藏前提

select a.col1,b.col2
from a
left join b on(a.id = b.id)
where b.tag = '1'

实际上b.tag='1' 这个筛选条件已经带有b.tag is not null 的”隐藏前提“了,所以这里用left joinjoin的效果是一样的。

涉及到转化率的时候,表的顺序和转化率的顺序是一致的,且不能在where子句中添加后续流程的筛选条件,不然“隐藏前提”会过滤掉一部分数据而导致结果有误。

标签重叠

建立标签的时候要符合MECE原则(相互独立,完全穷尽);

一般来说建立标签的时候使用简单的逻辑(基础标签)

e.g. 性别区分:男、女、未知;

而不要使用“复合逻辑”,复合标签不仅逻辑上容易出错(标签重叠),维护成本也更高。

e.g. 同时考虑会员等级和性别,然后对应的标签值就会是:(铁牌、铜牌、银牌、金牌、钻石、皇冠)*(男,女,未知);

计算用户数量时,同一用户可能会有多个标签(行为标签、属性标签、不同时间段等),这样同一用户会分别存在多个标签中,对各标签求和会大于实际用户数量。

此外,一个用户有多个标签时,可能会涉及到多个标签的“或、且、非”运算。

e.g. 一个用户在某一时刻,可能有多张优惠券,优惠券的状态可能是【已使用、已过期、未使用】等,现在要判断当前有“未使用”的优惠券。

时间错位

即数据匹配时要在时间维度上要对齐。

e.g. T+1的用户标签匹配时,昨日的标签匹配今日的交易情况;

SQL常见错误总结的更多相关文章

  1. SQL常见错误及处理方法

    1.情况:数据库引擎安装失败,报类似权限不足的错误 解决:可能由于计算机名和用户名相同导致,更改计算机名,卸载干净重装即可

  2. sql 常见错误总结

    1.根据一张表更新另一张表的数据. . 写法轻松,更新效率高: update table1 set field1=table2.field1, field2=table2.field2 from ta ...

  3. sql 常见错误

    notFound = 1403L; .dupKey = -1L; openCloseErr = -2117L; cursorNotOpenErr = -1002L; .nullCursor = -14 ...

  4. 配置sql server 2000以允许远程访问 及 连接中的四个最常见错误

    地址:http://www.cnblogs.com/JoshuaDreaming/archive/2010/12/01/1893242.html 配置sql server 2000以允许远程访问适合故 ...

  5. .Net常见错误

    常见错误 #1: 把引用当做值来用,或者反过来 C++ 和其他很多语言的程序员,习惯了给变量赋值的时候,要么赋单纯的值,要么是现有对象的引用.然而,在C# 中,是值还是引用,是由写这个对象的程序员决定 ...

  6. SQL Server代理(5/12):理解SQL代理错误日志

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 如我们在这个系列的前几篇文章所见,SQL ...

  7. SQL常见笔试面试题

    sql理论题 1.触发器的作用? 答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的.它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化.可以 ...

  8. Hibernate常见错误整理

    Hibernate常见错误合集   1.错误:object references an unsaved transient instance - save the transient instance ...

  9. MySQL常见错误类型

    MySQL常见错误类型:1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010: ...

随机推荐

  1. 使用阿里大于平台发送短信验证码java代码实现

    待续..网站app后台还未完成,不能添加签名,短信不能正常发送. Tip: https://help.aliyun.com/document_detail/55284.html?spm=5176.sm ...

  2. OCR:慧眼读世界

    作者:微软亚洲研究院首席研究员 霍强 把手机摄像头对准菜单上的法语菜名,屏幕上实时显示出翻译好的中文菜名:将全世界图书馆的藏书转化为电子书:街景车游走于大街小巷,拍摄街景的同时也从街景图像中自动提取文 ...

  3. 吴裕雄--天生自然KITTEN编程:对话

  4. Swift 浅谈Struct与Class

    讨论Struct与Class之前,我们先来看一个概念:Value Type(值类型),Reference Type(引用类型): 1. 值类型的变量直接包含他们的数据,对于值类型都有他们自己的数据副本 ...

  5. Hihocoder1456 Rikka with Lattice

    众所周知,萌萌哒六花不擅长数学,所以勇太给了她一些数学问题做练习,其中有一道是这样的:勇太有一个$n times m$的点阵,他想要从这$n times m$个点中选出三个点 ${A,B,C}$,满足 ...

  6. JavaScript 核心学习——继承

    本篇博文讲述如何在 JavaScript 中实现继承,以及原型与原型链的知识,在附录中将会讲述 JavaScript 面向对象的常见错误. ##原型与原型链在 JavaScript 中,使用类将会付出 ...

  7. diary20180428

    17:05:59 今天早晨去了图书馆.学习了一把vscode.试图在河边看电脑,总有小虫不让我专心. 23:27:34 看纯黑直播打战神,有点感触. 动漫或游戏,角色觉醒,实力大增,小时候(甚至现在) ...

  8. Logstash实践

    转载请注明出处:https://www.cnblogs.com/shining5/p/9542710.html Logstash简介 一个开源的数据收集引擎,具有实时数据传输能力,可以统一过滤来自不同 ...

  9. Kali虚拟机的扩容经历

    Kali虚拟机的扩容经历 0x01 起因 更新了一下软件包,竟然提示我空间不足. 升级了 687 个软件包,新安装了 82 个软件包,要卸载 0 个软件包,有 8 个软件包未被升级. 需要下载 1,5 ...

  10. 用canvas实现简单的下雪效果

    首先新建一个html文件,将body的背景设置为天空的那种深蓝色,并创建一个canvas,canvas的操作逻辑都放在snow.js中: <!DOCTYPE html> <head& ...