50٪ تخفیف روی تمام دوره‌ها!
پایان تخفیف تا:
مشاهده دوره‌ها
0

در مورد تابع های dense rank و rank و حتی ntile در sql server

با سلام و خسته نباشید خدمت شما

من تابع های denserank و rank و ntile را خیلی بررسی کرده ام فقط یک سئوال داشتم و آن این هست که مثلا ایده استفاده از تابع denserank چیست یعنی در چه مواردی استفاده دارد و کجاها استفاده می شود مثلا اگر زحمت نیست چند مورد رابیان کنید حتی اگر ممکن هست تابع های rank و ntile را هم توضیح دهید که در چه مواردی استفاده دارند.

ممنونم که راهنمایی می کنید.

مچکرم.

پرسیده شده در 1396/05/06 توسط

5 پاسخ

0

با سلام و خسته نباشید خدمت شما

خیلی زحمت کشیدید اما مهندس جان منظور من این بود که در چه مواردی کاربرد دارد یعنی مثلا چه استفاده هایی دارد در پروژه هایی که استفاده می شود

ممنونم از شما

پاسخ در 1396/05/06 توسط
0

با سلام و خسته نباشید خدمت شما دوست عزیز

جناب مهندس عزیز ایده را گرفتم فقط اگر زحمت نیست می توانید در مورد تابع dense_rank یا rank یک مثال دیگر هم بزنید ممنون می شوم

اگر هم می توانید در مورد تابع ntile یک ایده را بیان کنید.

با تشکر از شما

مچکرم

پاسخ در 1396/05/07 توسط
1

هر دوی اینها رنک سطر مشخصی رو در بین گروهی از سطرها که در دستور مشخص شده رو به صورت عدد برمیگردونه با این تفاوت که rank بصورت غیرمتداوم و غیرمنظم ولی denserank بصورت مرتب

SELECT empno,
       deptno,
       sal,
       RANK() OVER (PARTITION BY deptno ORDER BY sal) "rank"
FROM   emp;

     EMPNO     DEPTNO        SAL       rank
---------- ---------- ---------- ----------
      7934         10       1300          1
      7782         10       2450          2
      7839         10       5000          3
      7369         20        800          1
      7876         20       1100          2
      7566         20       2975          3
      7788         20       3000          4
      7902         20       3000          4
      7900         30        950          1
      7654         30       1250          2
      7521         30       1250          2
      7844         30       1500          4
      7499         30       1600          5
      7698         30       2850          6


SELECT empno,
       deptno,
       sal,
       DENSE_RANK() OVER (PARTITION BY deptno ORDER BY sal) "rank"
FROM   emp;

     EMPNO     DEPTNO        SAL       rank
---------- ---------- ---------- ----------
      7934         10       1300          1
      7782         10       2450          2
      7839         10       5000          3
      7369         20        800          1
      7876         20       1100          2
      7566         20       2975          3

nlite هم گروههای مختلف سطرها رو با پارامترهای مشخص شده در دستور توزیع میکنه

دستور

USE AdventureWorks2012;   
GO  
SELECT p.FirstName, p.LastName  
    ,NTILE(4) OVER(ORDER BY SalesYTD DESC) AS Quartile  
    ,CONVERT(nvarchar(20),s.SalesYTD,1) AS SalesYTD  
    , a.PostalCode  
FROM Sales.SalesPerson AS s   
INNER JOIN Person.Person AS p   
    ON s.BusinessEntityID = p.BusinessEntityID  
INNER JOIN Person.Address AS a   
    ON a.AddressID = p.BusinessEntityID  
WHERE TerritoryID IS NOT NULL   
    AND SalesYTD <> 0;  
GO  

نتیجه

FirstName      LastName              Quartile  SalesYTD       PostalCode  
-------------  --------------------- --------- -------------- ----------  
Linda          Mitchell              1         4,251,368.55   98027  
Jae            Pak                   1         4,116,871.23   98055  
Michael        Blythe                1         3,763,178.18   98027  
Jillian        Carson                1         3,189,418.37   98027  
Ranjit         Varkey Chudukatil     2         3,121,616.32   98055  
José           Saraiva               2         2,604,540.72   98055  
Shu            Ito                   2         2,458,535.62   98055  
Tsvi           Reiter                2         2,315,185.61   98027  
Rachel         Valdez                3         1,827,066.71   98055  
Tete           Mensa-Annan           3         1,576,562.20   98055  
David          Campbell              3         1,573,012.94   98055  
Garrett        Vargas                4         1,453,719.47   98027  
Lynn           Tsoflias              4         1,421,810.92   98055  
Pamela         Ansman-Wolfe          4         1,352,577.13   98027  
 (14 row(s) affected)  
پاسخ در 1396/05/06 توسط
1

در مثال زیر ببینید با روش رنک و دی رنک کارمندان یک شرکت در بخش های مختلف بر اساس حقوق رنک بندی شدن تفاوت رو ببینید متوجه میشید

SELECT empno,
       deptno,
       sal,
       RANK() OVER (PARTITION BY deptno ORDER BY sal) "rank"
FROM   emp;

     EMPNO     DEPTNO        SAL       rank
---------- ---------- ---------- ----------
      7934         10       1300          1
      7782         10       2450          2
      7839         10       5000          3
      7369         20        800          1
      7876         20       1100          2
      7566         20       2975          3
      7788         20       3000          4
      7902         20       3000          4
      7900         30        950          1
      7654         30       1250          2
      7521         30       1250          2
      7844         30       1500          4
      7499         30       1600          5
      7698         30       2850          6
SELECT empno,
       deptno,
       sal,
       DENSE_RANK() OVER (PARTITION BY deptno ORDER BY sal) "rank"
FROM   emp;

     EMPNO     DEPTNO        SAL       rank
---------- ---------- ---------- ----------
      7934         10       1300          1
      7782         10       2450          2
      7839         10       5000          3
      7369         20        800          1
      7876         20       1100          2
      7566         20       2975          3
      7788         20       3000          4
      7902         20       3000          4
      7900         30        950          1
      7654         30       1250          2
      7521         30       1250          2
      7844         30       1500          3
      7499         30       1600          4
      7698         30       2850          5

SQL>
پاسخ در 1396/05/06 توسط

پاسخ شما