Mysql中自定义开窗函数,row_number,dense_rank.

在数仓开发中或者数据分析中,我们经常用到开窗函数。

但是在Mysql中没有我们该怎么办呢?

如下是在实际开发中遇到的两个例子,给大家分享一下,希望能帮到大家

自定义实现row_number

SELECT student_id, student_name
	, @i := @i + 1 AS rownum
FROM student, (
		SELECT @i := 0
	) t

通过以上sql,可以看出其实很简单。只需要定义变量i,然后再每一列后面i自增 +1 即可。

自定义实现dense_rank

SELECT student_id, student_name,student_answer, 
	 CASE 
		WHEN @prevRank = student_answer THEN @curRank
		ELSE @curRank := @curRank + 1
	END AS rankNO, @prevRank := student_answer
FROM lesson_student_fact_real, (
		SELECT @curRank := 0, @prevRank := NULL
	) r

自定义dense_rank 也很简单,只是dense_rank 需要根据一个数据列来判断是否相等,所以要定义两个变量来实现,如果相等值就不变,否则就 +1

猜你喜欢

转载自blog.csdn.net/zhangyupeng0528/article/details/112983454