数据分析之SQL:常用模型

发布网友

我来回答

1个回答

热心网友


以下介绍常用的SQL写法:


case when的用法---不管偏不偏,你可能真没见过这种写法
内连接VS左连接---80%的业务代码都与之相关
distinct的用法--你可能真的错怪distinct了
order by的注意事项---order by一般放在主查询后,子查询无效!
group by---新手小白,总是group by时报错!
having--having有时真的很牛逼
topN问题---分组取最大,分组取前几
标准SQL与基于hive的SQL---最常见的区别
不得不知的聚合函数---数据库中的聚合函数真的比excel快很多!
SQL优化--路漫漫其修远兮……
做需求写SQL需要注意的问题---一家之言



1. case when的用法:
- 不同岗位调不同等级的薪水;
- 行列转换之case when;
- SQL语句执行顺序:from--where---group by--having--select --distinct ---order by --limit;
- 带Left Join的SQL语句执行顺序:先执行子查询,再执行主查询;
- 最终实现效果:将具有相同特征信息的聚成一类,然后统计这类的数据;case 字段 when 条件 then =case when 字段 =条件 then ;

2. 内连接VS左连接:
- 内连接:连接键匹配上就连接,没有匹配上就丢掉!
- 左连接:以左表为准(左表中的所有数据都会出现),右表匹配主表,匹配上就写入,没匹配上就写null。

3. distinct的用法:
- 去除重复值,但查询字段>=2时,就是对这两个字段联合去重(两个字段同时相同,才会被当作重复值);
- 只能放在首列,否则报错;
- 去除重复值最好用group by,distinct更多时候出现在count(distinct 字段)中用于统计去除重复值的条数。

4. order by的注意事项:
- 放在语句的最后,同时执行顺序也是最后;
- 放在子查询中会失效,一般放在主查询中最后执行!

5. group by:
- group by+聚合键;
- select 后只能出现聚合键,或是聚合函数;不能出现其它的字段,否则报错!

6. having 有时真的很牛逼:
- 只能跟在group by后,不能单独使用;
- 是对group by分组后的数据进行筛选判断。

7. topN问题:
- 分组取最大,最小,平均值,但无法得到聚合键之外的数据,这时可以使用关联子查询;
- 求得每组前两名数据,使用limit+union all。

8. 标准SQL与基于hive的SQL:
- 在标准SQL中,查询所有课程成绩小于60分学生的学号、姓名;
- 在Hive中,in后只能跟字符串,不允许出现特定语法结构;
- 内连接可以将小表写在左边,以实现MR中的map join效果。

9. 不得不知的聚合函数:
- sum与case when的结合;
- count与case when的结合;
- 统计各分数段人数、课程号和课程名称。

10. SQL优化:
- Hive sql中多表join时,小表写在左边可以提高性能;
- count(*)会返回包含null的行数,count(字段)返回不包括null的行数;
- spark支持非等值连接,查询速度高于hive。

11. 需要注意的事项:
- SQL语言有时会跑出你意料之外的结果,但逻辑清晰时能得出你想要的数据;
- 内连接无所谓表先后顺序,左连接时,右表有NULL,不能group by 右表字段,计数左表字段;
- 理清业务逻辑后再写SQL,考虑使用漏斗还是内连接,连接条件等;
- 建表时,少where,保证少建表。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com