توابع تحلیلی (Analytic) در SQL Server

دوشنبه 3 خرداد 1395

SQL Server شامل چندین توابع تحلیلی است ، که این توابع تحلیلی تمامی مقادیر را بر اساس گروهی از ردیف ها محاسبه میکند. در این مقاله قصد داریم هر یک تابع تحلیلی را به اختصار توضیح دهیم

توابع تحلیلی (Analytic) در SQL Server

SQL Server  شامل چندین توابع تحلیلی است ، که این توابع تحلیلی تمامی  مقادیر را بر اساس گروهی از ردیف ها محاسبه میکنند.توابع تحلیلی میتوانند یک یا چند ردیف برای هر گروه برگردانند. نمونه هایی از توابع تحلیلی:

CUME_DIST

FIRST_VALUE

LAST_VALUE

LEAD

LAG

PERCENTILE_COUNT

PERCENTILE_DISC

PERCENT_RANK

حالا  هر یک تابع تحلیلی به اختصار توضیح میدهیم،برای درک بهتر از جدول  نمایش داده شده در زیر استفاده میکنیم.

table

COME_DIST :

تابع  COME_DIST ،محاسبه توزیع تجمعی یک مقدار در  گروهی از مقادیر را انجام میدهدو موقعیت نسبی از یک مقدار مشخص در گروهی از مقادیر را دارد.

به عنوان مثال، توزیع تجمعی برای یک ردیف داده شده در گروه برای  تعداد سطرها با مقادیر برابر  یا کمتر از مقدار r، تقسیم بر تعداد کل ردیف در گروه مساوی است. رنج مقادیر بازگردانده شده توسط CUME_DIST بزرگتر از 0 و کمتر یا برابر با 1 است.

Syntax:

CUME_DIST( )
OVER ( [ partition_by_clause ] order_by_clause )

نمونه:

Example

FIRST_VALUE :

تابع FIRST_VALUE ، اولین مقدار  در یک مجموعه مرتب شده از مقادیر را برمی گرداند. نوع بازگشت  این تابع همان نوع scalar_expression است.

Syntax :

FIRST_VALUE( )
OVER ( [ partition_by_clause ] order_by_clause )

نمونه:

Example

LAST_VALUE:

تابع LAST_VALUE مقدار قبلی در مجوعه ای مرتب شده از مقادیر را برمیگرداند.

Syntax :

LAST_VALUE( )
OVER ( [ partition_by_clause ] order_by_clause )

نمونه :

Example

نمونه:

Example

در نتیجه بالا نکته جالب این است که اگر از ردیف 1  به 10  بروید ، مقدار  FIRST_VALUE  برای هر گروه  یکسان است، اما مقدار LAST_VALUE  برای هر سطر متفاوت است .نتیجه این است که ما هر بار از ردیف 1 به 10 میرویم ،مقدار آخرین ردیف تغییر میکند و مقدار قبلی در ردیفی است که ما روی آن عملیات انجام میدهیم.

LEAD:

تابع LEAD دسترسی به داده ها ی ردیف بعدی  در مجموعه نتیجه  بدون استفاده از    استself-join.

 LEAD  دسترسی به یک ردیف در یک داده فیزیکی  آفست است  که پیروی از ردیف فعلی را فراهم می کند.

Syntax :

LEAD ( scalar_expression ,offset , default )
OVER ( partition_by_clause [order_by_clause] )

پارامتر ها:

Offset(آفست) : شماره  ردیف های سطر جاری که در آنها مقادیری وجود دارند را در خودش نگه میدارد .

Default : هنگامی که scalar_expression در آفست NULL است، مقداری را برمیگرداند.

نمونه :

Example

LAG:

تابع LAG  فقط در مقابل تابع LEAD کار میکند. LAG دسترسی داده از ردیف قبلی را  در همان نتیجه بدون استفاده از self-join ست میکند. LAG دسترسی به ردیفی در یک داده فیزیکی  آفست  که  قبل از ردیف فعلی می آید را فراهم میکند.

Syntax :

LAG( scalar_expression ,offset ,default)
OVER ( partition_by_clause [order_by_clause] )

پارامترها:

Offset : شماره  ردیف های سطر جاری که در آنها مقادیری وجود دارند را در خودش نگه میدارد .

Default : هنگامی که scalar_expression در آفست NULL است، مقداری را برمیگرداند.

نمونه :

Example

PERCENTILE_CONT :

تابع تحلیلی PERCENTILE_CONT ، محاسبه percentile (درصد) براساس توزیع پیوسته ای از مقدار ستون را انجام میدهد. این شبیه به پیدا کردن میانه با  مقدار درصد است.

اگر تعداد المنت PERCENTILE_CONT زوج باشد ،دو رقم  وسط را پیدا  و باهم جمع کرده و تقسیم بر 2 میکند و در صورت اینکه تعداد فرد باشد  المنت PERCENTILE_CONT محاسبه شده ، رقم وسط را انتخاب کرده در لیست سفارشی محاسبه میکند.

  Syntax

پارامترها:

نمونه:

Example

PERCENTILE_DISC :

تابع تحلیلی PERCENTILE_DISC محاسبه ی percentile (درصد یا صدک )  خاص برای مقادیر طبقه بندی شده در تمامی rowset و یا در پارتیشن مجزا از یک rowset را انجام میدهد. برای گرفتن مقدار صدک P ، تابع PERCENTILE_DISC  مقادیر expression را با عبارت ORDER BY را مرتب میکند و مقداری با کوچکترین مقدار CUME_DIST  (با توجه به خصوصیات مشابه) که بزرگتر یا مساوی با P باشد را برمیگرداند.

Syntax:

پارامترها:

نمونه:

Example

PERCENT_RANK :

تابع تحلیلی PERCENT_RANK  رتبه بندی نسبی یک ردیف در گروهی از ردیف ها  را محاسبه میکند.  PERCENT_RANK جایگاه نسبی  یک مقدار در یک مجموعه نتیجه کوئری(query result set) و یا پارتیشن را محاسبه میکند.

PERCENT_RANK شبیه به تابع CUME_DIST است.

فرمول:

 PERCENT_RANK() = (RANK() – 1) / (Total Rows – 1)

Syntax:

 PERCENT_RANK( partition_by_clause order_by_clause)

نمونه:

Example

در جدول فوق PERCENT_RANK  برای Emp_Id 6، RANK=4  خواهد بود،

    PERCENT_RANK=(RANK-1)/(Total_Row-1)  
    =(4-1)/(10-1)  
    =3/9  
    =0.3333333  

آموزش نصب sql server 2017

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید