sql 高級開窗函數row_number() over()和row_number() over(partition by)【mysql5.7及以下不支持,mysql8.0及sqlserver支持】


高級開窗函數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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM