نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی پرتال اطلاعاتی

توابع جمع Sql. اپراتورهای INTERSECT و EXCEPT

استفاده از توابع جمع

SQL بسیاری از توابع داخلی از دسته‌های مختلف را تعریف می‌کند، که در میان آنها، توابع انبوهی که بر روی مقادیر ستون‌ها در مجموعه‌ای از سطرها عمل می‌کنند و یک مقدار واحد را برمی‌گردانند، جایگاه ویژه‌ای را اشغال می‌کنند. آرگومان های توابع جمع می توانند هم ستون های جدول و هم نتایج عبارات روی آنها باشند. توابع مجموع خود را می توان در سایر عبارات حسابی گنجاند. جدول زیر متداول‌ترین توابع جمع‌آوری استاندارد مورد استفاده را فهرست می‌کند.


فرمت کلی یک تابع مجموع یکنواخت به شرح زیر است:

تابع_نام ([ALL | DISTINCT] عبارت)

جایی که DISTINCT نشان می دهد که تابع باید فقط مقادیر آرگومان های مختلف را در نظر بگیرد و ALL - همه مقادیر، از جمله مقادیر تکراری (این پیش فرض است). به عنوان مثال، تابع AVG با کلمه کلیدی DISTINCT برای ردیف های ستون با مقادیر 1، 1، 1 و 3، 2 را برمی گرداند و اگر کلمه کلیدی ALL وجود داشته باشد، 1.5 را برمی گرداند.

توابع جمع در بندهای SELECT و HAVING استفاده می شوند. در اینجا ما به کاربرد آنها در بند SELECT نگاه خواهیم کرد. در این مورد، عبارت در آرگومان تابع برای تمام ردیف‌های جدول ورودی عبارت SELECT اعمال می‌شود. علاوه بر این، توابع جمع و ستون های جدول (یا عبارات با آنها) را نمی توان در بند SELECT استفاده کرد، مگر اینکه عبارت GROUP BY که در بخش بعدی به آن خواهیم پرداخت، وجود نداشته باشد.

تابع COUNT دو فرمت دارد. در حالت اول، تعداد ردیف‌های جدول ورودی برگردانده می‌شود، در حالت دوم، تعداد مقادیر آرگومان در جدول ورودی:

  • شمردن (*)
  • COUNT (بیان)

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

Query: تعداد انواع محصولاتی که اطلاعات مربوط به آنها در پایگاه داده موجود است.

COUNT (*) AS را انتخاب کنید "تعداد انواع محصولات"

از محصول

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

Query: تعداد نام‌های متمایز موجود در جدول مشتری.

SELECT COUNT (FNAME متمایز)

از مشتری

استفاده از بقیه توابع مجموع یکنواخت مانند COUNT است، با این تفاوت که برای توابع MIN و MAX، استفاده از کلمات کلیدی DISTINCT و ALL بی معنی است. علاوه بر فیلدهای عددی، فیلدهای کاراکتر را می توان با توابع COUNT، MAX و MIN استفاده کرد. اگر آرگومان تابع انبوه حاوی هیچ مقداری نباشد، تابع COUNT 0 و بقیه NULL برمی‌گردانند.

SELECT MAX (تاریخ سفارش)

از جانب

WHERE تاریخ سفارش "1.09.2010"

تکلیف خود مطالعه: پرس و جوها را در SQL فرموله کنید تا داده های زیر را انتخاب کنید:

  • هزینه کل کلیه سفارشات؛
  • تعداد شهرهای متمایز موجود در جدول مشتری.

این درس مبحث sql تغییر نام یک ستون (فیلدها) را با استفاده از کلمه تابع AS پوشش می دهد. همچنین به مبحث توابع انبوه در sql پرداخت. نمونه های خاصی از درخواست ها تجزیه و تحلیل خواهند شد

می توانید نام ستون ها را در پرس و جوها تغییر نام دهید. این باعث می شود نتایج خواناتر شوند.

در SQL، تغییر نام فیلدها با استفاده از کلمه کلیدی ASکه برای تغییر نام فیلدها در مجموعه نتایج استفاده می شود

نحو:

انتخاب کنید<имя поля>مانند<псевдоним>از جانب ...

بیایید به مثالی از تغییر نام در SQL نگاه کنیم:

نمونه DB "Institute":نمایش نام معلمان و حقوق آنها، برای معلمانی که حقوق آنها زیر 15000 است، نام فیلد زارپلاتا را به "دستمزد کم"


✍ راه حل:

تغییر نام ستون ها در SQL اغلب ضروری است هنگام محاسبه مقادیر مرتبط با چندین فیلدجداول بیایید یک مثال را در نظر بگیریم:

نمونه DB "Institute":از جدول معلمان، فیلد نام را خروجی بگیرید و میزان حقوق و پاداش را محاسبه کنید و نام فیلد را نام ببرید "حقوق_جایزه"


✍ راه حل:
1 2 نام را انتخاب کنید، (zarplata + premia) AS zarplata_premia FROM معلمان;

نام را انتخاب کنید، (zarplata + premia) AS zarplata_premia FROM معلمان;

نتیجه:

توابع جمع در SQL

توابع جمع در sql برای بدست آوردن مجموع و محاسبه عبارات استفاده می شود:

همه توابع جمع یک مقدار واحد را برمی‌گردانند.

توابع COUNT، MIN و MAX برای هر نوع داده ای اعمال می شود.

توابع SUM و AVG فقط برای فیلدهای عددی استفاده می شوند.
بین توابع COUNT (*) و COUNT () تفاوت وجود دارد: دومی مقادیر NULL را هنگام شمارش در نظر نمی گیرد.

مهم:هنگام کار با توابع جمع در SQL، از یک کلمه خاص استفاده می شود مانند


نمونه DB "Institute":دریافت ارزش بالاترین حقوق در بین معلمان، نمایش نتیجه به عنوان "Max_zp"


✍ راه حل:
SELECT MAX (zarplata) AS max_zp FROM معلمان;

SELECT MAX (zarplata) AS max_zp FROM معلمان;

نتایج:

بیایید یک مثال پیچیده تر از استفاده از توابع جمع در sql را در نظر بگیریم.


✍ راه حل:

GROUP BY clause در SQL

گروه با بند در sql معمولاً همراه با توابع جمع استفاده می شود.

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

مثالی را با جدول درس ها در نظر بگیرید:

مثال:

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

باید در نظر داشت که وقتی توسط یک فیلد حاوی مقادیر NULL گروه بندی می شوند، تمام این رکوردها در یک گروه قرار می گیرند.

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

داشتن بیانیه SQL

عبارت HAVING در SQL برای اعتبارسنجی مقادیر مورد نیاز است. که با استفاده از تابع تجمیع پس از گروه بندی به دست می آیند(پس از استفاده از GROUP BY). چنین چکی نمی توان در یک بند WHERE گنجانده شود.

مثال: فروشگاه کامپیوتر دی بی... میانگین قیمت کامپیوترهایی با سرعت پردازنده یکسان را محاسبه کنید. محاسبه فقط برای گروه هایی که میانگین قیمت آنها کمتر از 30000 است.



  • توابع مجموعمانند نام فیلدها در دستور SELECT استفاده می شود، با یک استثنا: آنها نام فیلد را به عنوان آرگومان می گیرند. با توابع جمعو AVGفقط از فیلدهای عددی می توان استفاده کرد. با توابع COUNT، MAX و MINهر دو فیلد عددی و کاراکتری را می توان استفاده کرد. هنگامی که با فیلدهای کاراکتر استفاده می شود حداکثرو MINآنها را به معادل ASCII ترجمه کرده و به ترتیب حروف الفبا پردازش می کند. برخی از DBMS ها استفاده از توده های تو در تو را مجاز می دانند، اما این یک انحراف از استاندارد ANSI با تمام عواقب بعدی است.


برای مثال می توانید تعداد دانش آموزانی که در هر رشته امتحان داده اند را محاسبه کنید. برای انجام این کار، باید یک پرس و جو گروه بندی شده توسط فیلد "Discipline" را اجرا کنید و در نتیجه نام رشته و تعداد ردیف های گروه را برای این رشته نمایش دهید. استفاده از کاراکتر * به عنوان آرگومان برای تابع COUNT به این معنی است که تمام خطوط گروه شمارش می شوند.

R1 را انتخاب کنید. نظم و انضباط، COUNT (*)

GROUP BY R1.

نتیجه:


رشته R1 SELECT، COUNT (*)

WHERE R1. نمره NULL نیست

GROUP BY R1.

نتیجه:


قبل از گروه بندی در مجموعه تاپل ها قرار نمی گیرد، بنابراین تعداد تاپل های گروه برای رشته "نظریه اطلاعات" 1 عدد کمتر خواهد بود.

اگر درخواست را به روش زیر بنویسید می توان نتیجه مشابهی به دست آورد:

R1 را انتخاب کنید. نظم و انضباط، COUNT (R1. ارزیابی)

گروه توسط R1. انضباط؛

عملکرد COUNT (ATTRIBUTE NAME)تعداد مقادیر تعریف شده را در یک گروه بر خلاف یک تابع می شمارد شمردن (*)،که تعداد خطوط گروه را می شمارد. در واقع، در گروه با رشته "نظریه اطلاعات" 4 خط وجود دارد، اما فقط 3 مقدار خاص از ویژگی "ارزیابی".


قوانین مدیریت مقادیر تهی در توابع انبوه

اگر هر یک از مقادیر در ستون برابر باشد خالیآنها هنگام محاسبه نتیجه تابع حذف می شوند.

اگر همه مقادیر در یک ستون برابر باشند خالی، سپس حداکثر حداقل میانگین مجموع = تهی، شمارش = 0 (صفر).

اگر جدول خالی است، شمارش (*) = 0 .

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

قوانینی برای تفسیر توابع کل

توابع مجموع را می توان در لیست خروجی گنجاند و سپس آنها را در کل جدول اعمال کرد.

SELECT MAX (امتیاز) از R1حداکثر امتیاز را در جلسه می دهد.

جمع را از R1 انتخاب کنیدمجموع تمام ارزیابی ها را در هر جلسه ارائه می دهد.

AVG (امتیاز) را از R1 انتخاب کنیدنمره متوسط ​​را برای کل جلسه می دهد.


2 نتیجه: "width = 640"

با مراجعه مجدد به پایگاه داده Session (جدول R1)، تعداد امتحانات با موفقیت را خواهیم یافت:

COUNT (*) را انتخاب کنید اجاره شده است _ امتحانات

WHERE درجه 2;

نتیجه:


آرگومان توابع جمع می تواند ستون های جداول جداول باشد. برای محاسبه، به عنوان مثال، تعداد مقادیر متمایز یک ستون خاص در یک گروه، لازم است از کلمه کلیدی DISTINCT همراه با نام ستون استفاده شود. بیایید تعداد نمرات دریافتی مختلف برای هر رشته را محاسبه کنیم:

رشته R1 SELECT، COUNT (ارزیابی متمایز R1)

WHERE R1. نمره NULL نیست

GROUP BY R1.

نتیجه:


اگر شرط صریح را در قسمت WHERE حذف کنید، همین نتیجه به دست می آید، در این صورت پرس و جو به شکل زیر خواهد بود:

R1 را انتخاب کنید. نظم و انضباط، COUNT (DISTINCT R1. ارزیابی)

گروه توسط R1. انضباط؛

عملکرد COUNT (R1.Evaluation متمایز)فقط قطعی در نظر می گیرد مختلفارزش های.

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


2 گروه توسط R2. گروه، R1. انضباط؛ در اینجا، تابع CAST () ستون "امتیاز" را به یک نوع داده معتبر تبدیل می کند. "عرض = 640"

R2.Group، R1.Discipline، شمارش (*) به عنوان مجموع، AVG (بازیگر (امتیاز به صورت اعشاری (3،1))) را به عنوان میانگین_نقطه انتخاب کنید.

از R1، R2

جایی که R1. نام کامل = R2. نام و R1. نمره صفر نیست

و R1. درجه 2

گروه بر اساس R2. گروه، R1. انضباط؛

در اینجا تابع قالب ()ستون Score را به یک نوع داده معتبر تبدیل می کند.


شما نمی توانید از توابع جمع در عبارت WHERE استفاده کنید زیرا شرایط در این بخش بر حسب یک ردیف و توابع جمع بر اساس گروه های ردیف ارزیابی می شوند.

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

بیایید یک پرس و جو بسازیم که گروه هایی را که در آنها بیش از یک دس در یک رشته در امتحانات به دست آمده را نشان دهد:


یک نتیجه: "width = 640"

R2 را انتخاب کنید. گروه

از R1، R2

WHERE R1. نام کامل = R2. نام و

امتیاز R1 = 2

GROUP BY R2. گروه، R1. نظم و انضباط

داشتن تعداد (*) 1;

نتیجه:


ما یک DB "Bank" داریم که از یک جدول F تشکیل شده است که رابطه F را ذخیره می کند و حاوی اطلاعات حساب های موجود در شعب یک بانک خاص است:

کل موجودی حساب را در شعب پیدا کنید. می توان با انتخاب SUM از جدول برای هر شاخه، یک پرس و جو جداگانه برای هر یک از آنها ایجاد کرد، اما عملیات GROUP BY همه آنها را در یک دستور قرار می دهد:

انتخاب کنید شاخه , مجموع ( باقی مانده )

گروه به شاخه;

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


5000; آرگومان های موجود در عبارت HAVING از همان قوانینی پیروی می کنند که در عبارت SELECT که از GROUP BY استفاده می کند. آنها باید یک مقدار در هر گروه خروجی داشته باشند. "عرض = 640"

فرض کنید فقط آن شعبه هایی را انتخاب می کنید که مجموع موجودی حساب های آنها از 5000 دلار بیشتر است و همچنین کل موجودی شعب انتخاب شده. برای نمایش شعب با کل موجودی بیش از 5000 دلار، باید از بند HAVING استفاده کنید. عبارت HAVING معیارهایی را که برای حذف گروه‌های خاص از خروجی استفاده می‌شود، تعریف می‌کند، درست همانطور که عبارت WHERE برای ردیف‌های جداگانه انجام می‌دهد.

دستور صحیح به صورت زیر خواهد بود:

SELECT شعبه، SUM (موجودی)

دسته بندی بر اساس شاخه

داشتن مجموع ( باقی مانده ) 5 000;

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


دستور زیر ممنوع خواهد بود:

SELECT شعبه، SUM (موجودی)

گروه به شعبه

تاریخ افتتاح = 12/27/2004 ;

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

SELECT شعبه، SUM (موجودی)

WHERE تاریخ افتتاح = '27/12/2004'

گروه به شاخه;


معنای این استعلام به شرح زیر است: میزان موجودی هر شعبه از حساب های افتتاح شده در 27 دسامبر 2004 را بیابید.

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

SELECT شعبه، SUM (موجودی)

از F، Q

WHERE F. Branch = Q. Branch

گروه به شعبه

داشتن شعبه در («سن پترزبورگ»، «پسکوف»، «اوریوپینسک»)؛

100000; اگر کل موجودی بیش از 100000 دلار باشد، آن را در نسبت حاصل می بینیم، در غیر این صورت نسبت خالی دریافت می کنیم. "عرض = 640"

بنابراین، در عبارات حسابی محمول های موجود در شرط انتخاب عبارت HAVING، می توانید مستقیماً فقط از مشخصات ستون هایی که به عنوان ستون های گروه بندی در بند GROUP BY مشخص شده اند استفاده کنید. بقیه ستون ها را می توان فقط در مشخصات توابع جمعی COUNT، SUM، AVG، MIN و MAX مشخص کرد، که در این مورد مقداری مجموع را برای کل گروه ردیف ها محاسبه می کند. نتیجه اجرای عبارت HAVING یک جدول گروه بندی شده است که فقط شامل گروه های ردیفی است که نتیجه ارزیابی شرط انتخاب در قسمت HAVING برای آنها TRUE است. به ویژه، اگر عبارت HAVING در پرس و جوی وجود داشته باشد که حاوی GROUP BY نباشد، نتیجه اجرای آن یا یک جدول خالی یا نتیجه بخش های قبلی عبارت جدول است که به عنوان یک گروه بدون در نظر گرفته می شود. گروه بندی ستون ها بیایید به یک مثال نگاه کنیم. فرض کنید می‌خواهیم کل موجودی‌ها را برای همه شعبه‌ها نمایش دهیم، اما فقط در صورتی که بیش از 100000 دلار باشد. در این صورت، کوئری ما شامل عملیات گروه‌بندی نخواهد بود، بلکه شامل یک بخش HAVING خواهد بود و به شکل زیر خواهد بود:

انتخاب جمع ( باقی مانده )

داشتن مجموع ( باقی مانده ) 100 000;

اگر کل موجودی بیش از 100000 دلار باشد، آن را در نسبت حاصل می بینیم، در غیر این صورت نسبت خالی دریافت می کنیم.


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

برای مثال، تابع مجموع AVG () ستونی از اعداد را به عنوان آرگومان می گیرد و میانگین آنها را محاسبه می کند.

برای محاسبه متوسط ​​درآمد سرانه یک ساکن Zelenograd، به پرس و جو زیر نیاز دارید:

«درآمد متوسط ​​=»، AVG (SUMD) را انتخاب کنید

SQL دارای شش تابع مجموع است که انواع مختلفی از خلاصه ها را ارائه می دهد (شکل 1):

- SUM () مجموع تمام مقادیر موجود در ستون را محاسبه می کند.

- AVG () میانگین را در بین مقادیر موجود در ستون محاسبه می کند.

- MIN () کوچکترین را در بین تمام مقادیر موجود در ستون پیدا می کند.

- MAX () بزرگترین را در بین تمام مقادیر موجود در ستون پیدا می کند.

- COUNT () تعداد مقادیر موجود در ستون را می شمارد.

- COUNT (*) تعداد ردیف های جدول نتیجه پرس و جو را می شمارد.

آرگومان یک تابع مجموع می تواند یک نام ستون ساده، مانند مثال قبلی، یا یک عبارت باشد، مانند عبارت زیر که مالیات سرانه را محاسبه می کند:

SELECT AVG (SUMD * 0.13)

این کوئری یک ستون موقت حاوی مقادیر (SUMD * 0.13) برای هر ردیف در جدول PERSON ایجاد می کند و سپس میانگین ستون موقت را محاسبه می کند.

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

جمع (SUMD) را از شخص انتخاب کنید

تابع تجمیع همچنین می تواند برای محاسبه مجموع یک جدول از نتایج به دست آمده از پیوستن چندین جدول منبع استفاده شود. به عنوان مثال، می توانید کل درآمدی را که ساکنان از منبعی به نام بورسیه دریافت می کنند محاسبه کنید:

انتخاب جمع (پول)

از سود، HAVE_D

WHERE PROFIT.ID = HAVE_D.ID

AND PROFIT.SOURCE = 'بورسیه'

توابع مجموع MIN () و MAX () به شما امکان می دهند به ترتیب کوچکترین و بزرگترین مقادیر را در جدول پیدا کنید. با این حال، ستون می تواند حاوی مقادیر عددی یا رشته ای، یا مقادیر تاریخ یا زمان باشد.

برای مثال می توانید تعریف کنید:

الف) کمترین درآمد کل ساکنین و بالاترین مالیات قابل پرداخت:

SELECT MIN (SUMD)، MAX (SUMD * 0.13)

ب) تاریخ تولد مسن ترین و جوان ترین ساکن:

SELECT MIN (RDATE)، MAX (RDATE)

(ج) نام‌های خانوادگی، نام‌ها و نام‌های پدر اولین و آخرین ساکنان فهرست، به ترتیب حروف الفبا:

SELECT MIN (FIO)، MAX (FIO)

هنگام اعمال این توابع انبوه، باید به یاد داشته باشید که داده های عددی بر اساس قوانین حسابی مقایسه می شوند، تاریخ ها به ترتیب مقایسه می شوند (مقادیر تاریخ اولیه کمتر از موارد بعدی در نظر گرفته می شوند)، فواصل زمانی بر اساس مدت زمان آنها مقایسه می شوند.

هنگام استفاده از MIN () و MAX () با داده های رشته، نتیجه مقایسه دو رشته به جدول رمزگذاری کاراکتر مورد استفاده بستگی دارد.

تابع مجموع COUNT () تعداد مقادیر را در یک ستون از هر نوع می شمارد:

(الف) چند آپارتمان در منطقه کوچک 1 وجود دارد؟

SELECT COUNT (ADR) FROM FLAT WHERE ADR LIKE "%, 1_ _-%"

ب) چند نفر از ساکنان منابع درآمد دارند؟

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

ج) چه تعداد منبع درآمد توسط ساکنان استفاده می شود؟

SELECT COUNT (DISTINCT ID) FROM HAVE_D (کلید کلیدی DISTINCT مشخص می کند که مقادیر غیر تکراری در ستون شمارش می شوند).

تابع مجموع ویژه COUNT (*) ردیف های جدول نتیجه را می شمارد نه مقادیر داده ها:

(الف) چند آپارتمان در منطقه کوچک 2 وجود دارد؟

انتخاب تعداد (*) FROM FLAT WHERE ADR LIKE "%, 2 __-%"

ب) ایوان ایوانوویچ چند منبع درآمد دارد؟

SELECT COUNT (*) FROM PERSON, HAVE_D WHERE FIO = "Ivanov Ivan Ivanovich" و PERSON.NOM = HAVE_D.NOM

(ج) چند نفر ساکن در یک آپارتمان در یک آدرس معین زندگی می کنند؟

SELECT COUNT (*) FROM PERSON WHERE ADR = "Zelenograd, 1001-45"

یکی از راه‌های درک چگونگی اجرای پرس‌و‌جوهای انبوه، این است که اجرای کوئری را در دو بخش در نظر بگیرید. ابتدا مشخص می‌شود که پرس‌وجو چگونه بدون توابع انبوه کار می‌کند و چندین ردیف از نتایج را برمی‌گرداند. سپس توابع انبوه به نتایج پرس و جو اعمال می شوند و یک ردیف خلاصه منفرد را برمی گرداند.

به عنوان مثال، پرس و جو پیچیده زیر را در نظر بگیرید: میانگین درآمد سرانه کل، مجموع درآمد کل ساکنان، و میانگین درآمد منبع را به عنوان درصدی از کل درآمد ساکنان بیابید. پاسخ توسط اپراتور داده می شود

SELECT AVG (SUMD)، SUM (SUMD)، (100 * AVG (money / SUMD)) FROM PERSON, PROFIT, HAVE_D WHERE PERSON.NOM = HAVE_D.NOM و HAVE_D.ID = PROFIT.ID

بدون توابع انبوه، پرس و جو به صورت زیر خواهد بود:

SUMD, SUMD, MONEY / SUMD FROM PERSON, PROFIT, HAVE_D WHERE PERSON.NOM = HAVE_D.NOM و HAVE_D.ID = PROFIT.ID را انتخاب کنید

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

در ردیف ستون های برگشتی، می توانید به جای نام هر ستون، یک تابع تجمیع را مشخص کنید. به عنوان مثال، می توان آن را در عبارتی گنجاند که مقادیر دو تابع مجموع را اضافه یا کم می کند:

حداکثر (SUMD) -MIN (SUMD) را از شخص انتخاب کنید

با این حال، یک تابع تجمعی نمی تواند آرگومان دیگری برای تابع تجمیعی باشد، یعنی. توابع جمع تو در تو ممنوع هستند.

علاوه بر این، توابع انبوه و نام ستون های معمولی را نمی توان همزمان در لیست ستون های برگشتی استفاده کرد، زیرا هیچ نکته ای در این مورد وجود ندارد، به عنوان مثال:

FIO، SUM (SUMD) را از شخص انتخاب کنید

در اینجا، اولین عنصر لیست به DBMS دستور می دهد تا جدولی ایجاد کند که از چندین ردیف تشکیل شده و برای هر ساکن یک ردیف داشته باشد. مورد دوم در لیست از DBMS می خواهد که یک مقدار نتیجه را دریافت کند که مجموع مقادیر در ستون SUMD است. این دو دستورالعمل با یکدیگر در تضاد هستند که منجر به خطا می شود.

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

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

همه این توابع یک مقدار واحد را برمی‌گردانند. در این مورد، توابع 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 (مدل) AS Qty_model، AVG (قیمت) 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.

مقالات مرتبط برتر