چندين نكته هنگام استفاده از تابع AVG در SQL SERVER

هنگام استفاده از تابع تجميعي AVG ممكنه با ارور زير مواجه بشيد

Arithmetic overflow error converting expression to data type int.

اين مشكل معمولا در مواقعي كه تعداد ركورد ها زياد باشن پيش مياد.
تابع AVG برا اساس نوع ستوني كه روش داره كار ميكنه خروجي رو تعيين ميكنه.براي مثال اگه ستون شما INT باشه خروجي هم INT ميشه و مثل COUNT_BIG نيست كه خروجيش از نوع  BIGINT باشه.حال اگه مقدار خروجي بشتر از مقدار INT باشه ارور بالا صادر ميشه.
براي رفع ميايم ورودي رو به BIGINT تبديل ميكنيم و تمام.

AVG(cast(innerResult.DiffTime AS BIGINT)) AS [avgTime]

مورد بعدي اينه كه تابع AVG از مقادير NULL چشم پوشي ميكنه فقط ممكنه با مشكل خروجي NULL مواجه بشيد توجه كنيد تابع AVG ميتونه مقدار NULL برگردونه بجاي صفر(البته منطقي هم هست).
براي رفع مشكلاتي از اين دست در LINQ خوندن + و + پيشنهاد ميشه.
و اما در SQL ميشه از روش زير استفاده كرد

SELECT ISNULL(AVG(3+3+3+NULL),0)

نظرات

پست‌های معروف از این وبلاگ

lnav ابزاری بسیار کاربردی برای پیمایش لاگ ها در لینوکس و البته مک

ساختن ایمیج های داکری به کمک BuildKit - بخش دوم

ساختن ایمیج های داکری به کمک BuildKit - بخش اول