数据库

盘点SQL写业务逻辑时的易错点—持续更新

2019-11-26  本文已影响0人  不分享的知识毫无意义

SQL语法好学,逻辑难学,特别是在一些业务场合下,稍有不慎数据就跑错了,为了避免这种尴尬,笔者整理一下工作中曾经遇到的各种坑,希望给各位看官一点参考。

1.一次left join统计pv出现的错误

2.hive -e报错

报错是cant recoginize at line 2巴拉巴拉的
然后思来想去想不明白是怎么回事,后来在网上看到有人说,是windows和unix的行尾结束符问题。
修改方法是:
打开notepad++ 点击编辑 行尾显示符 转换为unix然后就ok了。

3.聚合函数+over()统计的误区

聚合函数就是sum(),avg(),count()等等,这个是一个非常容易忽略的点,如果不注意很容易出题。
建表语句不说了,直接给出数据格式:


数据结构

分四种情况

select FName,Fcity,FAge,FSalary,
             sum(FSalary) over(partition by Fcity) '到当前行工资求和'
from over2;
结果

可以看出是对分区里的所有数据进行计算。

select FName,Fcity,FAge,FSalary,
             sum(FSalary) over(partition by Fcity order by FSalary) '到当前行工资求和'
from over2;
结果

可以看出是到当前行的累计聚合结果,注意如果出现数据相同情况,则共享同一个累计结果。
这个就是order by 的作用。

select FName,Fcity,FAge,FSalary,
             sum(FSalary) over(order by FSalary rows between unbounded preceding and current row) '到当前行工资求和'
from over2;
结果

可以看出即使数据相同也没有共享数据同一个聚合结果。

select FName,Fcity,FAge,FSalary,
             sum(FSalary) over(order by FSalary range between unbounded preceding and current row) '到当前行工资求和'
from over2;
结果

和第二种情况是一模一样的。

上一篇 下一篇

猜你喜欢

热点阅读