2012-01-10 43 views
-2

我從來不使用sql server ROW_NUMBER()函數。所以我讀了一些關於ROW_NUMBER()的文章,PARTITION & RANK()等,但仍然不清楚。Sql server ROW_NUMBER()&Rank()函數詳細信息....它是如何工作的

我發現語法是這樣

SELECT top 10 ROW_NUMBER() OVER(ORDER BY JID DESC) AS 'Row Number', 
JID,Specialist, jobstate, jobtype FROM bbajobs 

SELECT top 10 ROW_NUMBER() OVER(PARTITION BY JID ORDER BY JID DESC) AS 'Row Number', 
JID,Specialist, jobstate, jobtype FROM bbajobs 

我有幾個問題

1) what over() function does. why we need to specify column name in over function like OVER(ORDER BY JID DESC) 

2) i saw sometime people use PARTITION keyword. what it is? 
it is also used in over function like OVER(PARTITION BY JID ORDER BY JID DESC) 
3) in what type of situation we have to use PARTITION keyword 
4) when we specify PARTITION keyword in over then also we need to specify order by also why. only PARTITION keyword can not be used in over clause. 
5) what type of situation one should use RANK function 
6) what is CTE and what is the advantage of using CTE. it is just like temporary view. 
anyone get any performance boost if he/she use CTE other than reusability? 

請詳細討論我的觀點。如果有人讓我理解所有關鍵字如ROW_NUMBER(),分區& RANK()的簡單示例,那麼這將非常有幫助。感謝

回答

1
  1. 您需要ORDER BY,因爲集合沒有其他順序。你需要它的標準選擇

  2. PARTITION BY重置每個分區

  3. 許多COUNT

  4. 看點1.您可以用本身SUM使用分區,COUNT等

  5. 參見MSDN

  6. 單獨的問題

+0

PARTITION BY就像group by子句一樣使用? – Thomas 2012-01-11 08:42:14

+0

使用CTE的優點是什麼。它就像臨時視圖。使用CTE有沒有額外的好處? – Thomas 2012-01-11 08:43:09

+0

@Thomas:不。 PARTITION BY允許「內聯」聚合或多個GROUP BY。示例:http://stackoverflow.com/a/8324882/27535和http://stackoverflow.com/a/6219064/27535 – gbn 2012-01-11 09:35:15