• SQL常见问题及解决


    1、max()函数,对于某一个认为是数值型但实际是字符型字段取最大值,采用max函数,发现结果一直有错,如9>13.

      解决方法:在max括号里面加一个0,把这个字段转化为数值型再进行比较,select max(a+0)

    2、时间处理,日期取年月日,时间戳取日期,日期格式转化等等需求,经常会出现各种问题

      解决方法:先百度下用什么用什么函数来转,在正式跑数前,直接用select函数a来测试下

      一种特殊的日期处理是北京时间和Unix时间转换,代码如下:

      select from_unixtime(time),select from_unixtime(cast(substr(time,1,10)as int))

    3、先聚合再计数,如果要计算某个维度下的用户数,不要直接算用户数count(distinct imei),而应该是如下代码:

      select city,count(1) as uv from (select city,imei,count(1) from a group by city,imei)t1 group by city

    4、一列变多行,ab测试中会对一个用户打很多标签,而这些标签都是存在一个字段中,所以要看维度指标,要对该字段进行列变行拆解,代码如下:

      select *,b from t1 Lateral view explode(a) table as b

    5、取top,要看某分类下的top10消费额子分类(金额一致就并列),代码如下:

      select *,rank()over(partition by a order by b desc) as rank from table t1

    6、避免数据倾斜,小表在左,大表在右,使用map join,同时对空值进行过滤,代码如下:

      select /*+mapjoin(a)*/ t1.city,t2.type,count(t1.imei) as uv 

      from 

      (select city,imei,count(1) as pv  from a where imei !='' group by city,imei)t1

      join 

      (select type,imei,count(1) as pv  from a where imei !='' group by city,imei)t2

      on t1.imei=t2.imei

      group by t1.city,t2.type

  • 相关阅读:
    解析大型.NET ERP系统 20条数据库设计规范
    vi显示行号
    shell awk
    Linux使用Shell脚本实现ftp的自动上传下载
    MySQL Replication的Reset slave重置命令
    怎么样调整FreeBSD时区问题
    Basic Memory Structures
    States of Integrity Constraints
    Merging into a Table: Example
    oracle 单独开始一个事物的写法 。
  • 原文地址:https://www.cnblogs.com/xiao02fang/p/13194877.html
Copyright © 2020-2023  润新知