高級開窗函數row_number() over()和row_number() over(partition by)【mysql5.7及以下不支持,mysql8.0及sqlserver支持】
平常一般我們主鍵Id來進行排序,但是如果刪除了數據,那么會導致Id不連貫,如果我們進行分頁取數據的話那或導致數據出現少的情況,通過使用row_number() over()你將得到一個連續的列
select row_number() over(order by a.id)rowid,* from Student a inner join Course b ON a.Id=b.StudentId
解析:row_number() over(order by a.id) 這個是此語法的關鍵詞,以表a(Student)的id正序構建以個新的連續唯一(每條自增+1)的字段,別名為rowid
select row_number() over(partition by b.StudentId order by b.id)rowid,* from Student a inner join Course b ON a.Id=b.StudentId
解析:與上面不同不同的是此語句加入了partition by 這代表組內排序,以b.StudentId分組,如果studentId 相同則 以b.id 正序排序【連續唯一(每條自增+1)】,如果組內只有一條則就是1
