在数仓开发中或者数据分析中,我们经常用到开窗函数。
但是在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