توابع تحلیلی (Analytic) در SQL Server
دوشنبه 3 خرداد 1395SQL Server شامل چندین توابع تحلیلی است ، که این توابع تحلیلی تمامی مقادیر را بر اساس گروهی از ردیف ها محاسبه میکند. در این مقاله قصد داریم هر یک تابع تحلیلی را به اختصار توضیح دهیم
SQL Server شامل چندین توابع تحلیلی است ، که این توابع تحلیلی تمامی مقادیر را بر اساس گروهی از ردیف ها محاسبه میکنند.توابع تحلیلی میتوانند یک یا چند ردیف برای هر گروه برگردانند. نمونه هایی از توابع تحلیلی:
CUME_DIST
FIRST_VALUE
LAST_VALUE
LEAD
LAG
PERCENTILE_COUNT
PERCENTILE_DISC
PERCENT_RANK
حالا هر یک تابع تحلیلی به اختصار توضیح میدهیم،برای درک بهتر از جدول نمایش داده شده در زیر استفاده میکنیم.
COME_DIST :
تابع COME_DIST ،محاسبه توزیع تجمعی یک مقدار در گروهی از مقادیر را انجام میدهدو موقعیت نسبی از یک مقدار مشخص در گروهی از مقادیر را دارد.
به عنوان مثال، توزیع تجمعی برای یک ردیف داده شده در گروه برای تعداد سطرها با مقادیر برابر یا کمتر از مقدار r، تقسیم بر تعداد کل ردیف در گروه مساوی است. رنج مقادیر بازگردانده شده توسط CUME_DIST بزرگتر از 0 و کمتر یا برابر با 1 است.
Syntax:
CUME_DIST( ) OVER ( [ partition_by_clause ] order_by_clause )
نمونه:
FIRST_VALUE :
تابع FIRST_VALUE ، اولین مقدار در یک مجموعه مرتب شده از مقادیر را برمی گرداند. نوع بازگشت این تابع همان نوع scalar_expression است.
Syntax :
FIRST_VALUE( ) OVER ( [ partition_by_clause ] order_by_clause )
نمونه:
LAST_VALUE:
تابع LAST_VALUE مقدار قبلی در مجوعه ای مرتب شده از مقادیر را برمیگرداند.
Syntax :
LAST_VALUE( ) OVER ( [ partition_by_clause ] order_by_clause )
نمونه :
نمونه:
در نتیجه بالا نکته جالب این است که اگر از ردیف 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 است، مقداری را برمیگرداند.
نمونه :
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 است، مقداری را برمیگرداند.
نمونه :
PERCENTILE_CONT :
تابع تحلیلی PERCENTILE_CONT ، محاسبه percentile (درصد) براساس توزیع پیوسته ای از مقدار ستون را انجام میدهد. این شبیه به پیدا کردن میانه با مقدار درصد است.
اگر تعداد المنت PERCENTILE_CONT زوج باشد ،دو رقم وسط را پیدا و باهم جمع کرده و تقسیم بر 2 میکند و در صورت اینکه تعداد فرد باشد المنت PERCENTILE_CONT محاسبه شده ، رقم وسط را انتخاب کرده در لیست سفارشی محاسبه میکند.
Syntax
پارامترها:
نمونه:
PERCENTILE_DISC :
تابع تحلیلی PERCENTILE_DISC محاسبه ی percentile (درصد یا صدک ) خاص برای مقادیر طبقه بندی شده در تمامی rowset و یا در پارتیشن مجزا از یک rowset را انجام میدهد. برای گرفتن مقدار صدک P ، تابع PERCENTILE_DISC مقادیر expression را با عبارت ORDER BY را مرتب میکند و مقداری با کوچکترین مقدار CUME_DIST (با توجه به خصوصیات مشابه) که بزرگتر یا مساوی با P باشد را برمیگرداند.
Syntax:
پارامترها:
نمونه:
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)
نمونه:
در جدول فوق PERCENT_RANK برای Emp_Id 6، RANK=4 خواهد بود،
PERCENT_RANK=(RANK-1)/(Total_Row-1) =(4-1)/(10-1) =3/9 =0.3333333
- SQL Server
- 6k بازدید
- 6 تشکر