SQL 编写技巧总结(持续更新中)

UDF 函数整理

用处

语法

获取json数据

get_json_object(字段,'$.x.x')

截取字符串

substr(字段,从第几位开始截取)

字符串日期相减

DATEDIFF(日期1,日期2)【yyyy-MM-DD格式】

将一个复杂类型ARRAY或者MAP转换为单行记录

SELECT explode(myCol) AS myNewCol FROM myTable;

将使用的表与UTF等函数做结合关联

LATERAL VIEW udtf(expression) tableAlias AS columnAlias (‘,’ columnAlias)* fromClause: FROM baseTable (lateralView)*

参考 http://blog.csdn.net/bitcarmanlee/article/details/51926530

提升效率

  • 查询必须加分区字段
  • 连表查询,查询条件尽量放在子查询去
  • 子查询不要出现select *

列转行

在一些情况下,我们可能需要列转行的操作 看下面一个case

date

homepage

uv

2018-03-05

mp

10

2018-03-05

zby

20

2018-03-06

mp

40

2018-03-07

zby

25

表TB_A结构如下

date

homepage

uv

2018-03-05

mp

10

2018-03-05

zby

20

2018-03-06

mp

40

2018-03-07

zby

25

我们的需求是统计每天所有门票(mp)和周边游(zby)的所有uv

目标结构是这样

mp

zby

50

45

这个时候我们可以这么做

  • step1:case when then实现列转行
  • step2:sum聚合实现求和,去除null
select sum(mp) mp,sum(zby) zby
from    (select 
        case when homepage = 'mp' then uv end 'mp'
        case when homepage = 'zby' then uv end 'zby'
    from TB_A)

Union

将两个结果集的数据做纵向连接,可以直接作为一个新的结果集,需要两个结果集的返回字段一致

[SQL 1]
union/union all
[SQL 2]

分为Union 和 Union All,二者区别如下:

用法

区别

union

取两个结果集的唯一值

union all

直接连接不去重

Join

将两个结果集做横向连接,作为一个新的数据源,放在[from] 里面语句段里面

select [select statement]
from 
t1 left/right/inner/full/outer join t2 on [on statement]
where
[where statement]

主要分为 left/right/inner/full/outer join,区别如下

用法

区别

left join(left outer join )

关联的信息左边数据集有数据即可返回,右边没有返回null

right join(right outer join )

关联的信息右边数据集有数据即可返回,右边没有返回null

inner join

关联的信息必须左右边数据集都存在

outer/full join

关联的信息必须左右边数据集有一方存在即可

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏转载gongluck的CSDN博客

逆转字符串

逆转字符串——输入一个字符串,将其逆转并输出 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #inc...

2874
来自专栏乐沙弥的世界

PL/SQL --> 语言基础

PL/SQL是过程化的SQL语言,是ORACLE对SQL语言的扩展,在普通SQL语句的基础上增加了编程语言的特点。使得该语言不仅具有过程编程语

1073
来自专栏数据库

常用SQL语句和语法汇总

近几年数据库发挥了越来越重要的作用,这其中和大数据、数据科学的兴起有不可分割的联系。学习数据库,可以说是每个从事IT行业的必修课。你学或不学,它就在那里;你想或...

2295
来自专栏恰同学骚年

《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)

  数据库在物理上由数据文件和事务日志文件组成,每个数据库必须至少有一个数据文件和一个日志文件。

945
来自专栏chenssy

【死磕Sharding-jdbc】---SQL解析-INSERT解析

分析insert解析之前,首先看一下mysql官方对insert语法的定义,因为SQL解析跟语法息息相关:

1082
来自专栏java工会

Java后端开发猿不可不知的,Mybatis几种使用方式总结

1653
来自专栏乐沙弥的世界

MongoDB 部分索引(Partial Indexes)

a、部分索引就是带有过滤条件的索引,即索引只存在与某些文档之上 b、满足过滤条件的文档在查询时,其执行计划将使用该列上的索引,否则不会被使用 c、稀疏索...

1100
来自专栏乐沙弥的世界

SQL 基础-->常用函数

lpad | rpad(x,width [,pad_string]) 字符定长,(不够长度时,左|右填充)

812
来自专栏祥子的故事

Hive SQL 日常工作使用总结

点号(.):表示和任意字符串匹配,星号(*):表示重复“左边的字符串”,(x|y)表示和x或者y匹配

1776
来自专栏青青天空树

mysql-存储过程(转载)

转自(http://www.cnblogs.com/exmyth/p/3303470.html)

1302

扫码关注云+社区