你真的會玩 SQL 嗎?冷落的 Top 和 Apply

歡醉發表於2015-11-19

本章預先想寫一些Top和Apply基本的用法,但好像沒什麼意義,所以刪掉了一些無用的東西,只留下幾個示例,以保證系列的完整性。

Top和Apply解決的常見問題,如返回每個僱員的3個最新訂單,訂單的時間越新優先順序就越高,但還需要引入一個決勝屬性,以確定時間楨的訂單的優先順序,如可用id作為決勝屬性。這裡提供的解決方案比其它方案要簡單得多,且執行速度更快。

返回每個僱員的3個最新訂單:

運用APPLY解決:

先掃描employees 獲得empid,對每個empid值對orders表查詢返回 該僱員的3個最新訂單。這裡可以返回多個屬性。

還有一種解決方案在特定情況下竟然比使用APPLY運算子的方法還要快,使用ROW_NUMBER函式。先為每個訂單計算行號,按empid進行分割槽,並按orderdate desc, orderid desc 順序排序。然後在外部查詢中,只篩選行號小於或等於3的行。

如下:

 

練習:

從學生表中選取對應班級的前num名學生成績

 

參考SQL:

相關文章