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

    标签重叠

    建立标签的时候要符合MECE原则(相互独立,完全穷尽);
    一般来说建立标签的时候使用简单的逻辑(基础标签)
    e.g. 性别区分:男、女、未知;
    而不要使用“复合逻辑”,复合标签不仅逻辑上容易出错(标签重叠),维护成本也更高。
    e.g. 同时考虑会员等级和性别,然后对应的标签值就会是:(铁牌、铜牌、银牌、金牌、钻石、皇冠)*(男,女,未知);
    计算用户数量时,同一用户可能会有多个标签(行为标签、属性标签、不同时间段等),这样同一用户会分别存在多个标签中,对各标签求和会大于实际用户数量。
    此外,一个用户有多个标签时,可能会涉及到多个标签的“或、且、非”运算。
    e.g. 一个用户在某一时刻,可能有多张优惠券,优惠券的状态可能是【已使用、已过期、未使用】等,现在要判断当前有“未使用”的优惠券。

    时间错位

    即数据匹配时要在时间维度上要对齐。
    e.g. T+1的用户标签匹配时,昨日的标签匹配今日的交易情况;

    本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。

    转载请注明作者及出处

  • 相关阅读:
    VS2005 新控件之 容器 《PlaceHolder》
    vs2005/.NET2.0 控件演示之 超级链接 《HyperLink》
    VS2005 控件演示之 容器《Panel》
    投票系统[单/复选,投票数量/项随意][C#/SQL/文件包括数据库代码全部在]
    datalgrid\datalist\repeater\的用法以及相关小技巧
    使用XmlDocument类完成对XML的查、删、添、改(不完美,望指教)
    Repeater读取数据并分页
    vs2005控件演示之 MultiView
    datagrid 分页及隐藏指定列再以及鼠标动作(换背景)
    VS2.0控件之日历《Calendar》C#
  • 原文地址:https://www.cnblogs.com/dataxon/p/12544200.html
Copyright © 2020-2023  润新知