تعداد شناسه ها را با یک مقدار مشخص بشمارید. شمارش تعداد رکوردها در گروه ها (ایجاد شده توسط GROUP BY)

چگونه می توانم از تعداد مدل های رایانه شخصی تولید شده توسط یک تامین کننده خاص مطلع شوم؟ چگونه می توان میانگین قیمت کامپیوترهایی با مشخصات فنی مشابه را تعیین کرد؟ این و بسیاری از سوالات دیگر مربوط به برخی از اطلاعات آماری را می توان با استفاده از پاسخ داد توابع نهایی (جمع). استاندارد توابع کلی زیر را ارائه می دهد:

همه این توابع یک مقدار واحد را برمی‌گردانند. در همان زمان، توابع COUNT، MINو حداکثرقابل اجرا برای هر نوع داده، در حالی که جمعو AVGفقط برای فیلدهای عددی استفاده می شود. تفاوت بین عملکرد شمردن(*)و شمردن(<имя поля>) این است که مورد دوم هنگام محاسبه مقادیر NULL را در نظر نمی گیرد.

مثال. حداقل و حداکثر قیمت را برای رایانه های شخصی بیابید:

مثال. تعداد رایانه های موجود تولید شده توسط سازنده A را بیابید:

مثال. اگر به تعداد مدل های مختلف تولید شده توسط سازنده A علاقه مند باشیم، می توان پرس و جو را به صورت زیر فرموله کرد (با استفاده از این واقعیت که در جدول Product هر مدل یک بار ثبت می شود):

مثال. تعداد مدل های مختلف موجود تولید شده توسط سازنده A را بیابید. پرس و جو مشابه مورد قبلی است که در آن باید تعداد کل مدل های تولید شده توسط سازنده A را تعیین کنید. در اینجا همچنین باید تعداد مدل های مختلف را در میز رایانه شخصی (یعنی آنهایی که برای فروش در دسترس هستند).

برای اطمینان از اینکه در هنگام بدست آوردن شاخص های آماری فقط از مقادیر منحصر به فرد استفاده می شود آرگومان توابع مجموعمی تواند به کار رود پارامتر DISTINCT. یکی دیگر پارامتر ALLپیش فرض است و فرض می کند که تمام مقادیر برگشتی در ستون شمارش می شوند. اپراتور،

اگر باید تعداد مدل های PC تولید شده را بدست آوریم هر کسسازنده، شما باید استفاده کنید GROUP BY بند، به صورت نحوی دنبال می شود بندهای WHERE.

GROUP BY بند

GROUP BY بندبرای تعریف گروه هایی از خطوط خروجی که می توان روی آنها اعمال کرد استفاده می شود توابع انبوه (COUNT، MIN، MAX، AVG و SUM). اگر این بند وجود ندارد و از توابع انبوه استفاده می شود، تمام ستون ها با نام ذکر شده در انتخاب کنید، باید در آن گنجانده شود توابع جمع، و این توابع برای کل مجموعه سطرهایی که گزاره پرس و جو را برآورده می کنند اعمال خواهند شد. در غیر این صورت، تمام ستون های لیست SELECT شامل نمی شودتوابع در مجموع باید مشخص شود در بند GROUP BY. در نتیجه، تمام ردیف های پرس و جو خروجی به گروه هایی تقسیم می شوند که با ترکیب مقادیر یکسانی در این ستون ها مشخص می شوند. پس از این، توابع جمع برای هر گروه اعمال می شود. لطفاً توجه داشته باشید که برای GROUP BY همه مقادیر NULL برابر در نظر گرفته می شوند، یعنی. هنگام گروه بندی توسط یک فیلد حاوی مقادیر NULL، همه این ردیف ها در یک گروه قرار می گیرند.
اگر اگر یک بند GROUP BY وجود داشته باشد، در بند SELECT بدون توابع مجموع، سپس پرس و جو به سادگی یک ردیف از هر گروه را برمی گرداند. این ویژگی به همراه کلمه کلیدی DISTINCT می تواند برای حذف ردیف های تکراری در مجموعه نتایج استفاده شود.
بیایید به یک مثال ساده نگاه کنیم:
مدل SELECT، COUNT(model) AS Qty_model، AVG(price) AS Avg_price
از کامپیوتر
GROUP BY مدل;

در این درخواست برای هر مدل PC تعداد و میانگین هزینه آنها مشخص می شود. همه ردیف‌هایی که مقدار مدل یکسانی دارند یک گروه را تشکیل می‌دهند و خروجی SELECT تعداد مقادیر و مقادیر میانگین قیمت را برای هر گروه محاسبه می‌کند. نتیجه پرس و جو جدول زیر خواهد بود:
مدل Qty_model میانگین_قیمت
1121 3 850.0
1232 4 425.0
1233 3 843.33333333333337
1260 1 350.0

اگر SELECT دارای ستون تاریخ باشد، محاسبه این شاخص ها برای هر تاریخ خاص امکان پذیر است. برای انجام این کار، باید تاریخ را به عنوان یک ستون گروه بندی اضافه کنید، و سپس توابع جمع برای هر ترکیبی از مقادیر (مدل-تاریخ) محاسبه می شود.

چندین خاص وجود دارد قوانین برای انجام توابع کل:

  • اگر در نتیجه درخواست هیچ ردیفی دریافت نشد(یا بیش از یک ردیف برای یک گروه معین)، پس هیچ داده منبعی برای محاسبه هیچ یک از توابع جمع وجود ندارد. در این حالت، نتیجه COUNT توابع صفر و نتیجه همه توابع دیگر NULL خواهد بود.
  • بحث و جدلتابع کل خود نمی تواند شامل توابع جمع باشد(تابع از تابع). آن ها در یک پرس و جو، مثلاً به دست آوردن حداکثر مقادیر متوسط ​​غیرممکن است.
  • نتیجه اجرای تابع COUNT است عدد صحیح(INTEGER). سایر توابع انبوه انواع داده های مقادیری را که پردازش می کنند به ارث می برند.
  • اگر تابع SUM نتیجه ای تولید کند که از حداکثر مقدار نوع داده استفاده شده بیشتر باشد، خطا.

بنابراین، اگر درخواست شامل نمی شود GROUP BY بندها، آن توابع جمعگنجانده شده است بند SELECT، روی تمام سطرهای پرس و جو به دست آمده اجرا می شوند. اگر درخواست شامل GROUP BY بند، هر مجموعه ای از ردیف هایی که دارای مقادیر یکسانی از یک ستون یا گروهی از ستون های مشخص شده در هستند GROUP BY بند، یک گروه تشکیل می دهد و توابع جمعبرای هر گروه به طور جداگانه انجام می شود.

داشتن پیشنهاد

اگر بند WHEREسپس یک گزاره برای فیلتر کردن ردیف ها تعریف می کند داشتن پیشنهاداعمال میشود پس از گروه بندیبرای تعریف یک گزاره مشابه که گروه ها را بر اساس مقادیر فیلتر می کند توابع جمع. این بند برای اعتبارسنجی مقادیری که با استفاده از آنها به دست می آیند مورد نیاز است تابع کلنه از ردیف های جداگانه منبع رکورد تعریف شده در بند FROM، و از گروه هایی از این قبیل خطوط. بنابراین، چنین چکی نمی تواند شامل شود بند WHERE.

در این آموزش نحوه استفاده را یاد می گیرید COUNT تابعدر SQL Server (Transact-SQL) با نحو و مثال.

شرح

در SQL Server (Transact-SQL) COUNT تابعتعداد ردیف های یک فیلد یا عبارت را در مجموعه نتیجه برمی گرداند.

نحو

نحو تابع COUNT در SQL Server (Transact-SQL) به صورت زیر است:

یا نحو تابع COUNT هنگام گروه بندی نتایج یک یا چند ستون به صورت زیر است:

پارامترها یا آرگومان ها

express1 , express2 , … express_n
عباراتی که در یک تابع COUNT محصور نشده اند و باید در یک عبارت GROUP BY در انتهای دستور SQL گنجانده شوند.
aggregate_expression ستون یا عبارتی است که مقادیر غیر NULL آن شمارش می شود.
جداول - جداولی که می خواهید رکوردها را از آنها دریافت کنید. باید حداقل یک جدول در بند FROM وجود داشته باشد.
شرایط WHERE - اختیاری. اینها شرایطی است که برای رکوردهای انتخاب شده باید رعایت شود.

از جمله مقادیر غیر NULL

همه این را درک نمی کنند، اما تابع COUNT فقط آن دسته از رکوردهایی را می شمارد که در آن مقدار عبارت در COUNT (aggregate_expression) NULL نباشد. وقتی یک عبارت حاوی مقدار NULL باشد، در شمارنده COUNT گنجانده نمی شود.

بیایید به مثالی از تابع COUNT نگاه کنیم که نشان می دهد چگونه مقادیر NULL توسط تابع COUNT ارزیابی می شوند.

به عنوان مثال، اگر جدول زیر به نام بازارها را دارید:

این مثال COUNT عدد 3 را برمی گرداند زیرا تمام مقادیر market_id در مجموعه نتایج پرس و جو NULL نیستند.

با این حال، اگر دستور SELECT زیر را اجرا کنید که از تابع COUNT استفاده می کند:

Transact-SQL

تعداد (فرزندان) را از بازارها انتخاب کنید. --نتیجه: 1

این مثال COUNT فقط 1 را برمی گرداند، زیرا تنها یک مقدار filials در مجموعه نتایج پرس و جو NOT NULL است. این اولین خطی خواهد بود که می گوید filials = "بله". این تنها ردیفی است که در محاسبه تابع COUNT گنجانده شده است.

کاربرد

تابع COUNT را می توان در نسخه های زیر از SQL Server (Transact-SQL) استفاده کرد:
SQL Server vNext، SQL Server 2016، SQL Server 2015، SQL Server 2014، SQL Server 2012، SQL Server 2008 R2، SQL Server 2008، SQL Server 2005

مثال با یک فیلد

بیایید به چند نمونه تابع SQL Server COUNT نگاه کنیم تا نحوه استفاده از تابع COUNT در SQL Server (Transact-SQL) را درک کنیم.

به عنوان مثال، می توانید بفهمید یک کاربر با last_name = "Rasputin" چند مخاطب دارد.

در این مثال از تابع COUNT، ما نام مستعار "تعداد مخاطبین" را برای عبارت COUNT (*) مشخص کردیم. بنابراین، مجموعه نتایج "تعداد مخاطبین" را به عنوان نام فیلد نشان می دهد.

مثال با استفاده از DISTINCT

می توانید از عملگر DISTINCT در تابع COUNT استفاده کنید. برای مثال، عبارت SQL زیر تعداد بخش‌های منحصربه‌فردی را برمی‌گرداند که حداقل یک کارمند دارای first_name = 'Samvel' است.

بیایید خلاصه کردن را یاد بگیریم. نه، اینها نتایج مطالعه SQL نیست، بلکه نتایج مقادیر ستون های جداول پایگاه داده است. توابع جمع SQL بر روی مقادیر یک ستون عمل می کنند تا یک مقدار منفرد را تولید کنند. متداول‌ترین توابع جمع‌آوری SQL عبارتند از SUM، MIN، MAX، AVG و COUNT. لازم است بین دو مورد استفاده از توابع جمع تمایز قائل شد. اول، توابع جمع به تنهایی استفاده می شوند و یک مقدار منفرد را برمی گرداند. دوم، توابع جمع با عبارت SQL GROUP BY استفاده می شود، یعنی گروه بندی بر اساس فیلدها (ستون ها) برای به دست آوردن مقادیر به دست آمده در هر گروه. اجازه دهید ابتدا موارد استفاده از توابع جمع بدون گروه بندی را در نظر بگیریم.

تابع SQL SUM

تابع SQL SUM مجموع مقادیر موجود در ستون جدول پایگاه داده را برمی گرداند. فقط می توان آن را برای ستون هایی اعمال کرد که مقادیر آنها اعداد است. پرس و جوهای SQL برای بدست آوردن مجموع حاصل به این صورت شروع می شود:

جمع (COLUMN_NAME) را انتخاب کنید...

این عبارت با FROM (TABLE_NAME) دنبال می شود و سپس با استفاده از عبارت WHERE می توان یک شرط را مشخص کرد. علاوه بر این، نام ستون می تواند قبل از DISTINCT باشد، به این معنی که فقط مقادیر منحصر به فرد شمارش خواهند شد. به طور پیش فرض، همه مقادیر در نظر گرفته می شوند (برای این کار می توانید به طور خاص نه DISTINCT، بلکه ALL را مشخص کنید، اما کلمه ALL مورد نیاز نیست).

مثال 1.یک پایگاه داده شرکت با داده های مربوط به بخش ها و کارکنان آن وجود دارد. جدول کارکنان همچنین دارای یک ستون با داده های مربوط به حقوق کارمندان است. انتخاب از جدول به این صورت است (برای بزرگنمایی تصویر، با دکمه سمت چپ ماوس روی آن کلیک کنید):

برای به دست آوردن مجموع حقوق و دستمزد از عبارت زیر استفاده کنید:

جمع (حقوق) را از کارکنان انتخاب کنید

این کوئری مقدار 287664.63 را برمی گرداند.

و حالا در تمرینات ما در حال حاضر شروع به پیچیده کردن وظایف می کنیم و آنها را به مواردی که در عمل با آنها مواجه می شویم نزدیک می کنیم.

تابع SQL MIN

تابع SQL MIN همچنین روی ستون هایی که مقادیر آنها اعداد است عمل می کند و حداقل تمام مقادیر موجود در ستون را برمی گرداند. این تابع دارای نحوی شبیه به تابع SUM است.

مثال 3.پایگاه داده و جدول مانند مثال 1 هستند.

ما باید حداقل دستمزد کارمندان بخش شماره 42 را دریابیم. برای انجام این کار، درخواست زیر را بنویسید:

پرس و جو مقدار 10505.90 را برمی گرداند.

و دوباره تمرین برای حل خود. در این و برخی تمرین‌های دیگر، نه تنها به جدول کارکنان، بلکه به جدول سازمان نیز نیاز خواهید داشت که حاوی داده‌های مربوط به بخش‌های شرکت است:


مثال 4.جدول Org به جدول Staff اضافه می شود که حاوی اطلاعات مربوط به بخش های شرکت است. حداقل تعداد سالهای کار توسط یک کارمند در بخش واقع در بوستون را چاپ کنید.

تابع SQL MAX

تابع SQL MAX به طور مشابه کار می کند و دارای یک نحو مشابه است که زمانی استفاده می شود که شما نیاز به تعیین حداکثر مقدار در بین تمام مقادیر در یک ستون دارید.

مثال 5.

شما باید حداکثر حقوق کارمندان بخش شماره 42 را دریابید. برای انجام این کار، درخواست زیر را بنویسید:

پرس و جو مقدار 18352.80 را برمی گرداند

وقتشه تمرین برای حل مستقل.

مثال 6.ما دوباره با دو جدول کار می کنیم - Staff و Org. نمایش نام بخش و حداکثر ارزش کمیسیون دریافتی توسط یک کارمند در بخش متعلق به گروه بخش (Division) شرقی. استفاده کنید JOIN (پیوستن به جداول) .

تابع SQL AVG

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

مثال 7.پایگاه داده و جدول مانند نمونه های قبلی است.

فرض کنید می خواهید میانگین طول خدمت کارکنان بخش شماره 42 را بدانید. برای این کار، عبارت زیر را بنویسید:

نتیجه 6.33 خواهد بود

مثال 8.ما با یک میز کار می کنیم - کارکنان. نمایش میانگین حقوق کارمندان با 4 تا 6 سال سابقه.

تابع COUNT SQL

تابع SQL COUNT تعداد رکوردهای جدول پایگاه داده را برمی گرداند. اگر SELECT COUNT(COLUMN_NAME) ... را در جستار مشخص کنید، نتیجه تعداد رکوردها بدون در نظر گرفتن آن دسته از رکوردهایی خواهد بود که در آنها مقدار ستون NULL (تعریف نشده) است. اگر از یک ستاره به عنوان آرگومان استفاده کنید و یک جستجوی SELECT COUNT(*) ... را شروع کنید، نتیجه تعداد تمام رکوردها (ردیف) جدول خواهد بود.

مثال 9.پایگاه داده و جدول مانند نمونه های قبلی است.

شما می خواهید تعداد کارمندانی که کمیسیون دریافت می کنند را بدانید. تعداد کارمندانی که مقادیر ستون Comm آنها NULL نیست با پرس و جو زیر برگردانده می شود:

تعداد (Comm) FROM Staff را انتخاب کنید

نتیجه 11 خواهد بود.

مثال 10.پایگاه داده و جدول مانند نمونه های قبلی است.

اگر می خواهید تعداد کل رکوردهای جدول را بیابید، از یک پرس و جو با یک ستاره به عنوان آرگومان برای تابع COUNT استفاده کنید:

تعداد (*) را از کارکنان انتخاب کنید

نتیجه 17 خواهد بود.

در بعدی تمرین برای حل مستقلباید از یک پرس و جو استفاده کنید.

مثال 11.ما با یک میز کار می کنیم - کارکنان. نمایش تعداد کارکنان بخش برنامه ریزی (Plains).

توابع جمع با SQL GROUP BY

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

مثال 12.یک پایگاه داده از پورتال تبلیغات وجود دارد. دارای یک جدول تبلیغات است که حاوی اطلاعات مربوط به تبلیغات ارسال شده برای هفته است. ستون Category شامل داده‌های مربوط به دسته‌های تبلیغات بزرگ (به عنوان مثال، املاک و مستغلات)، و ستون قطعات حاوی داده‌هایی درباره بخش‌های کوچک‌تر موجود در دسته‌ها است (به عنوان مثال، بخش‌های آپارتمان‌ها و خانه‌های تابستانی بخشی از دسته املاک هستند). ستون واحدها شامل اطلاعات تعداد آگهی های ارسال شده و ستون پول حاوی اطلاعاتی در مورد میزان پول دریافتی برای ارسال آگهی است.

دسته بندیقسمتواحدهاپول
حمل و نقلماشین ها110 17600
مشاور املاکآپارتمان ها89 18690
مشاور املاکداچا57 11970
حمل و نقلموتور سیکلت131 20960
مصالح و مواد ساختمانیتابلوها68 7140
مهندسی برقتلویزیون ها127 8255
مهندسی برقیخچال و فریزر137 8905
مصالح و مواد ساختمانیRegips112 11760
اوقات فراغتکتاب ها96 6240
مشاور املاکدر خانه47 9870
اوقات فراغتموسیقی117 7605
اوقات فراغتبازی ها41 2665

با استفاده از بیانیه SQL GROUP BY، مقدار پولی که با ارسال تبلیغات در هر دسته به دست آورده اید را بیابید. ما درخواست زیر را می نویسیم:

انتخاب دسته، جمع (پول) به عنوان پول از تبلیغات گروه به دسته

مثال 13.پایگاه داده و جدول مانند مثال قبلی است.

با استفاده از دستور SQL GROUP BY، دریابید که کدام قسمت از هر دسته بیشترین لیست را دارد. ما درخواست زیر را می نویسیم:

انتخاب دسته، قسمت، حداکثر (واحد) به عنوان حداکثر از تبلیغات گروه بر اساس دسته

نتیجه جدول زیر خواهد بود:

مقادیر کل و فردی را می توان در یک جدول به دست آورد ترکیب نتایج پرس و جو با استفاده از عملگر UNION .

پایگاه های داده رابطه ای و زبان SQL