sql常用函数使用记录

sql常用函数使用记录

  • sql常用函数使用记录
    • lag()
    • row_number()
    • coalesce()
    • distinct关键字 用于去重:
    • cast 和convert 的用法
    • having

sql常用函数使用记录

记录工作中使用到的sql常用函数,方便查阅。执行环境:spark_sql 、hive / kudu 。

lag()

取出某个字段前N条记录的值。
注意: 第一条记录已经无法再取前一条记录,所以第一条记录LAG()函数返回为空。
lag(e.rid, 1, null) over(partition by e.apk_id, e.def_distinct_id order by e.event_time asc) as last_rid

row_number()

–语法形式: ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2)
–解释: 根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)
–常用的使用场景: 取每个学科的前3名

row_number() over (partition by e.apk_id, e.def_distinct_id order by e.event_time asc ) num

coalesce()

返回其参数中第一个非空表达式,语法如下: COALESCE ( expression [ ,…n ] )

COALESCE(e.apk_os, app.os) as os

distinct关键字 用于去重:

DISTINCT 关键字可从 SELECT 语句的结果中除去重复的行。如果没有指定 DISTINCT,会返回所有行,包括重复的行。
eg:select distinct(domain_name),apply_date from service_domaindel
select * ,count(distinct domain_name) from service_domaindel group by domain_name 这个在mysql中支持,但是在oracle中不支持。

cast 和convert 的用法

SQL中的cast和convert都是用来将一种数据类型的表达式转换为另一种数据类型的表达式。
CAST和CONVERT提供相似的功能,只是语法不同。
在时间转化中一般用到convert,因为它比cast多加了一个style,可以转化成不同时间的格式。
使用 CAST:
CAST ( expression AS data_type )
使用 CONVERT:
CONVERT (data_type[(length)], expression [, style])

having

HAVING语句通常与GROUP BY语句联合使用,用来过滤由GROUP BY语句返回的记录集。
HAVING语句的存在弥补了WHERE关键字不能与聚合函数联合使用的不足。
eg:
如果想查询平均分高于80分的学生记录可以这样写:
SELECT id, COUNT(course) as numcourse, AVG(score) as avgscore
FROM student
GROUP BY id
HAVING AVG(score)>=80;
在这里,如果用WHERE代替HAVING就会出错。

注意:where语句在数据分组前进行过滤,having在数据分组后进行过滤,where排除的行不包括在分组中;having支持所有where操作符。

你可能感兴趣的:(大数据)