数据分析师日常防坑指南

SQL

2017-03-12  本文已影响10人  异想派

1、多表之间关联,并进行分组后,某天的同个userid可能会被计入不同的分组,即使每个分组计数使用了distinct,使用透视表,计算userid时,则该天userid会进行多次计算。相对于单表取某天的userid,会出现偏大的情况

2、排序函数区别

rank() OVER (partition by user_id order by ctime_datetime
ROW_NUMBER() OVER (partition by user_id order by ctime_datetime)

rank() over 碰到相同的,排序序号会相同,但是会占用序号。
而row number()的序号都是唯一的

3、区分新老用户
可以用户当前时间与用户出现的最小时间比较。若相等,则为新用户(首次出现)

4、选择唯一值
除了distinct,还可以依据时间排序,取其中一个值

5、case when 嵌套使用

sum(case when overdue>2 and repay_create_at<=case when

6、group by

在返回集字段中,这些字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。
我们可以将Group By操作想象成如下的一个过程,首先系统根据SELECT 语句得到一个结果集,如最开始的那个水果、出产国家、单价的一个详细表。然后根据分组字段,将具有相同分组字段的记录归并成了一条记录。这个时候剩下的那些不存在于Group By语句后面作为分组依据的字段就有可能出现多个值,但是目前一种分组情况只有一条记录,一个数据格是无法放入多个数值的,所以这里就需要通过一定的处理将这些多值的列转化成单值,然后将其放在对应的数据格中,那么完成这个步骤的就是聚合函数。这就是为什么这些函数叫聚合函数(aggregate functions)了。

7、COALESCE() 函数
返回其参数中第一个非空表达式。
[MS SQL]SQL表达式COALESCE讲解

8、Divide by zero error encountered.
解决除数为0的报错
How to avoid the “divide by zero” error in SQL?

SELECT COALESCE(2 / NULLIF(null,0), 0)   #返回0

或者

Select dividend / nullif(divisor, 0)    #返回空,divisor可以为0或null

9、IFNULL(expr1,expr2)函数

如果expr1不是NULL,IFNULL()返回expr1,否则返回expr2

10、IF(expr1,expr2,expr3)

如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。
作为表达式的if也可以用CASE when来实现

上一篇下一篇

猜你喜欢

热点阅读