SQL常见错误总结
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 join 和 join的效果是一样的。
涉及到转化率的时候,表的顺序和转化率的顺序是一致的,且不能在where子句中添加后续流程的筛选条件,不然“隐藏前提”会过滤掉一部分数据而导致结果有误。
标签重叠
建立标签的时候要符合MECE原则(相互独立,完全穷尽);
一般来说建立标签的时候使用简单的逻辑(基础标签)
e.g. 性别区分:男、女、未知;
而不要使用“复合逻辑”,复合标签不仅逻辑上容易出错(标签重叠),维护成本也更高。
e.g. 同时考虑会员等级和性别,然后对应的标签值就会是:(铁牌、铜牌、银牌、金牌、钻石、皇冠)*(男,女,未知);
计算用户数量时,同一用户可能会有多个标签(行为标签、属性标签、不同时间段等),这样同一用户会分别存在多个标签中,对各标签求和会大于实际用户数量。
此外,一个用户有多个标签时,可能会涉及到多个标签的“或、且、非”运算。
e.g. 一个用户在某一时刻,可能有多张优惠券,优惠券的状态可能是【已使用、已过期、未使用】等,现在要判断当前有“未使用”的优惠券。
时间错位
即数据匹配时要在时间维度上要对齐。
e.g. T+1的用户标签匹配时,昨日的标签匹配今日的交易情况;
SQL常见错误总结的更多相关文章
- SQL常见错误及处理方法
1.情况:数据库引擎安装失败,报类似权限不足的错误 解决:可能由于计算机名和用户名相同导致,更改计算机名,卸载干净重装即可
- sql 常见错误总结
1.根据一张表更新另一张表的数据. . 写法轻松,更新效率高: update table1 set field1=table2.field1, field2=table2.field2 from ta ...
- sql 常见错误
notFound = 1403L; .dupKey = -1L; openCloseErr = -2117L; cursorNotOpenErr = -1002L; .nullCursor = -14 ...
- 配置sql server 2000以允许远程访问 及 连接中的四个最常见错误
地址:http://www.cnblogs.com/JoshuaDreaming/archive/2010/12/01/1893242.html 配置sql server 2000以允许远程访问适合故 ...
- .Net常见错误
常见错误 #1: 把引用当做值来用,或者反过来 C++ 和其他很多语言的程序员,习惯了给变量赋值的时候,要么赋单纯的值,要么是现有对象的引用.然而,在C# 中,是值还是引用,是由写这个对象的程序员决定 ...
- SQL Server代理(5/12):理解SQL代理错误日志
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 如我们在这个系列的前几篇文章所见,SQL ...
- SQL常见笔试面试题
sql理论题 1.触发器的作用? 答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的.它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化.可以 ...
- Hibernate常见错误整理
Hibernate常见错误合集 1.错误:object references an unsaved transient instance - save the transient instance ...
- MySQL常见错误类型
MySQL常见错误类型:1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010: ...
随机推荐
- maven工程项目依赖爆红,手动导入依然缺少依赖
1.新建一个工程 2.把依赖添加到新建工程的pom文件 神奇的事情发生了,依赖自动补全!!! 3.点击install 安装一下可能有些依赖会有其他依赖 建议:不要在自己原来的工程上浪费时间,新建工程. ...
- dTree动态生成树(后台处理,简化前台操作)
dTree是个很方便在页面生成树的 js 控件,如果你下载了,我猜里在几分钟之内便能在页面上显示出一颗树来. 它本身给的例子是通过一些静态数据构造树,下面我说一种通过查询的数据动态构造树的方法. 例子 ...
- SpringBoot + JPA + mariadb
SpringBoot + JPA + MariaDB 源码:https://github.com/ldl326308/LiveGreen-SpringBoot.git JPA持久层方法名命名规则:
- Luogu_2434_[SDOI2005]区间
题目描述 现给定n个闭区间[ai, bi],1<=i<=n.这些区间的并可以表示为一些不相交的闭区间的并.你的任务就是在这些表示方式中找出包含最少区间的方案.你的输出应该按照区间的升序排列 ...
- 后端开发中,可以在Cache-Control设置的常用指令
max-age 该指令指定从当前请求开始,允许获取的响应被重用的最长时间(单位为秒.例如:Cache-Control:max-age=60表示响应可以再缓存和重用 60 秒.需要注意的是,在max-a ...
- H2O theme for Jekyll
正如我在微博上所说的,使用Jekyll半年以来一直没有令我满意的主题模板,所以开始计划自己写一套好看又好用的主题模板.设计之初就明确了极简主义,风格采用扁平化了,通过卡片式设计来进行区块分明的布局,参 ...
- Python学习笔记(四)函数式编程
高阶函数(Higher-order function) Input: 1 abs Output: 1 <function abs> Input: 1 abs(-10) Output: 1 ...
- windows dnsrecon
缺了两个模块 第一个:https://pypi.python.org/pypi/netaddr 第二个:dnspython 找到下载后setup.py install就OK了,话说GFW真***了,用 ...
- LeetCode~移除元素(简单)
移除元素(简单) 1. 题目描述 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使 ...
- 《深入理解 Java 虚拟机》读书笔记:类文件结构
正文 一.无关性的基石 1.两种无关性 平台无关性: Java 程序的运行不受计算机平台的限制,"一次编写,到处运行". 语言无关性: Java 虚拟机只与 Class 文件关联, ...