محاسبات میانگین حسابی، میانگین هندسی و میانه در T-SQL سرور SQL
در تحلیل دادهها و آمار، میانگین، میانه و میانگین هندسی مفاهیم کلیدی برای درک گرایش مرکزی مجموعه دادهها هستند. این معیارها تلاش میکنند تا با یافتن یک مقدار واحد، کل مجموعه داده را توصیف کنند. در این مقاله به بررسی عمیق میانگین حسابی، میانه و میانگین هندسی در محیط **SQL Server** میپردازیم و چگونگی محاسبه آنها را با دستورات مختلف **T-SQL** نشان میدهیم. این مباحث برای هر متخصص **تحلیل دادهها** و **مدیر پایگاه داده** که با **T-SQL** کار میکند، ضروری است.
میانگین حسابی (میانگین ساده)
میانگین حسابی، که معمولاً به آن میانگین ساده نیز گفته میشود، حاصل جمع تمام مقادیر یک مجموعه تقسیم بر تعداد آنها است. فرض کنید مجموعهای از مقادیر را داریم و میخواهیم میانگین آنها را پیدا کنیم. برای شروع، یک جدول موقتی با مقادیر نمونه ایجاد میکنیم:
DECLARE @InputValues TABLE (id INT IDENTITY(1,1), Value INT);
INSERT INTO @InputValues VALUES (10), (20), (30), (40), (50), (60), (70), (80), (90), (100);
برای محاسبه **میانگین حسابی** میتوانیم مجموع مقادیر را بر تعداد کل آنها تقسیم کنیم:
SELECT SUM(Value) / COUNT(Value) AS [Simple_Arithmetic_Mean]
FROM @InputValues;
این کوئری نتیجه 55 را برمیگرداند. روش سادهتر برای محاسبه **میانگین حسابی** استفاده از تابع تجمیعی `AVG()` در **T-SQL** است. این تابع به طور خودکار مجموع را بر تعداد تقسیم میکند:
SELECT AVG(Value) AS [AVG_Arithmetic_Mean]
FROM @InputValues;
محاسبه میانه در SQL Server
میانه، مقدار میانی در یک مجموعه داده مرتب شده است. اگر تعداد کل مقادیر فرد باشد، میانه دقیقاً همان مقدار میانی خواهد بود. اما اگر تعداد کل مقادیر زوج باشد، میانه برابر با میانگین دو مقدار میانی است. برای محاسبه میانه، ابتدا باید دادهها را مرتب کنیم. سپس بر اساس تعداد ردیفها، مقدار یا مقادیر میانی را پیدا کنیم. این یک گام مهم در **تحلیل آماری** دادهها با استفاده از **T-SQL** است.
برای محاسبه **میانه در SQL Server** میتوانیم از توابع پنجرهای مانند `ROW_NUMBER()` و `NTILE()` استفاده کنیم. این توابع در **T-SQL** ابزارهای قدرتمندی برای مرتبسازی و بخشبندی دادهها هستند.
ابتدا، با استفاده از تابع `ROW_NUMBER()` همراه با بند `ORDER BY`، به هر ردیف یک شماره ترتیب اختصاص میدهیم. سپس با شمارش کل ردیفها، موقعیت میانه را محاسبه میکنیم. فرمول محاسبه موقعیت میانه به شرح زیر است:
این فرمول به ما کمک میکند تا موقعیت عددی میانه را در یک مجموعه داده مرتبشده بیابیم. حال با استفاده از یک Common Table Expression (CTE)، این منطق را در **SQL Server** پیادهسازی میکنیم. این رویکرد به ما امکان میدهد تا به صورت کارآمد، **میانه** را در **پایگاه داده** محاسبه کنیم:
;WITH GetRowNum AS (
SELECT Value,
ROW_NUMBER() OVER (ORDER BY Value) AS rn,
COUNT(Value) OVER () AS total_rows
FROM @InputValues
)
SELECT AVG(CAST(Value AS DECIMAL(10,2))) AS Median
FROM GetRowNum
WHERE rn IN ((total_rows + 1) / 2, (total_rows + 2) / 2);
خروجی این کوئری 55.00 است که **میانه** دقیق مجموعه داده ما را نشان میدهد.
راه دیگر برای محاسبه میانه، استفاده از تابع `NTILE()` است. این تابع ردیفها را به تعداد گروههای مشخص شده تقسیم میکند. به عنوان مثال، اگر از `NTILE(2)` استفاده کنیم، ردیفها به دو گروه تقسیم میشوند که گروه اول دارای شماره کاشی 1 و گروه دوم دارای شماره کاشی 2 خواهد بود. این روش به ویژه برای یافتن **میانه** در مجموعههای داده بزرگ مفید است:
;WITH GetMedian AS (
SELECT Value,
NTILE(2) OVER (ORDER BY Value) AS [NTILE_NUM]
FROM @InputValues
)
SELECT AVG(CAST(Value AS DECIMAL(10,2))) AS [Median]
FROM GetMedian
WHERE NTILE_NUM = 1 OR NTILE_NUM = 2;
این کوئری نیز میانه را 55.00 برمیگرداند. با این حال، هنگام استفاده از تابع `NTILE()` برای محاسبه میانه باید دقت کرد، زیرا ممکن است در برخی موارد خاص، میانه دقیق را به دست ندهد. اگر دقت بالا حیاتی است، بهتر است نتیجه را با استفاده از روش `ROW_NUMBER()` تأیید کنید. این مورد برای **تحلیل آماری دادهها** در **SQL Server** بسیار مهم است.
محاسبه میانگین هندسی با T-SQL
میانگین هندسی به عنوان ریشه n-ام حاصلضرب n مقدار تعریف میشود. به عنوان مثال، اگر دو عدد 2 و 8 را داشته باشیم، میانگین هندسی آنها ریشه دوم (جذر) حاصلضرب (2 * 8) = 16 خواهد بود که برابر با 4 است. این نوع میانگین برای دادههایی که رشد نمایی دارند یا نرخهای تغییر را نشان میدهند، مناسبتر است و کاربرد زیادی در **آمار مالی** و **علمی** دارد.
برای محاسبه **میانگین هندسی**، میتوانیم از فرمول لگاریتمی زیر استفاده کنیم که در **SQL Server** به سادگی پیادهسازی میشود:
این فرمول بیان میکند که میانگین هندسی برابر است با تابع نمایی (EXP) میانگین لگاریتم طبیعی (LOG) مقادیر. استفاده از لگاریتم به ما امکان میدهد حاصلضرب را به جمع تبدیل کنیم و سپس میانگین آن را بگیریم، که برای محاسبات در **پایگاه داده** مناسبتر است. فرض کنید مجموعه داده زیر را داریم:
برای پیادهسازی **میانگین هندسی**، از یک مجموعه داده نمونه استفاده میکنیم:
DECLARE @InputValuesGM TABLE (id INT IDENTITY(1,1), Value INT);
INSERT INTO @InputValuesGM VALUES (10), (20), (30), (40), (50), (60), (70), (80), (90), (100);
با استفاده از توابع `EXP()` و `LOG()` در **T-SQL**، میتوانیم **میانگین هندسی** را برای مقادیر موجود در جدول `@InputValuesGM` محاسبه کنیم. این روش دقت بالایی را در محاسبات مالی و علمی فراهم میکند:
SELECT EXP(AVG(LOG(Value))) AS [Geometric_Mean]
FROM @InputValuesGM;
خروجی محاسبه **میانگین هندسی** برای این مجموعه داده، 47.78 خواهد بود. برای درک بهتر، یک مثال دیگر با مقادیر متفاوت را بررسی میکنیم. این کوئری، همانطور که انتظار میرود، برای مقادیر 2 و 8، **میانگین هندسی** 4.00 را تولید میکند:
SELECT EXP(AVG(LOG(Value))) AS [Geometric_Mean]
FROM (VALUES(2), (8)) AS T(Value);