Խմբավորում և ագրեգատային ֆունկցիաներ
Դիտարկենք Products հարաբերությունը Product IDProductName Supplier ID Unit Price UnitsIn StockDiscontinued… 1Chai … 2Chang … 3Aniseed Syrup … 4 Chef Anton's Cajun Seasoning … 5 Chef Anton's Gumbo Mix … 6 Grandma's Boysenberry Spread … 7 Uncle Bob's Organic Dried Pears … 8 Northwoods Cranberry Sauce … 9Mishi Kobe Niku … …………………
Ատրիբուտները ProductID- ապտանքի կոդ ProductName - ապրանքի անվանում SupplierID- մատակարարի կոդ UnitPrice- միավորի գին UnitsInStock - առկայության քանակ Discontinued- դաթարեցված է մատակարարումը …..
Գրել հարցում, որը կտա առկայությունում եղած արպանքի կոդը, մատակարարի կոդը, քանակը և գումար ` գին * քանակ SELECT ProductID, SupplierID,UnitsInStock, UnitPrice*UnitsInStock as Price UnitPrice*UnitsInStock as Price FROM Products
Դիցուք ուզում ենք իմանալ, առկայության մեջ եղած ապրանքների գումարները ըստ մատակարարի : Այսինքն ստանալ մատակարարի կոդը և առկայությունում եղած այդ մատակարարի մատակարարծ ապրանքների գումարը : Ստանալու համար անհրաժեշտ է խմբավորել մատակարարներին և յուրաքանչյուրի դիմաց գրել այդ մատակարարի մատակարարած ապրանքների առկայության գումարը : Խմբավորելու համար օգտագործում ենք GROUP BY- ը, որը գրվում է WHERE- ից հետո, ORDER BY- ից առաջ : Կորտեժների ատրբուտների արժեքները, կամ ատրիբուտներից կազմված թվաբանական արտահայտության արժեքները գումարելու համար օգտագործում ենք Sum() ագրեգատային ֆունկցիան : Հարցումը կունենա հետևյալ տեսքը
SELECT SupplierID, SUM(UnitPrice*UnitsInStock) as Price FROM Products GROUP BY SupplierID Եթե խմբավորումը կատարվում է ըստ մի քանի ատրիբուտի, ապա Group by- ից հետո թվարկվում են ստորակետով : Ընդ որում Group by- ին չմասնակցած ատրիբուտները Select- ում կարող հանդես գալ միայն որպես ագրեգատային ֆունկցիաների արգումենտ : Ագրեգատային ֆունկիաներն են SUM, AVG, COUNT,MAX, MIN
Ագրեգատային ֆունկցիաների նկարագրություն Ագրիգատային ֆունկցիա Արդյունք SUM([ALL | DISTINCT] expression) Թվաբանական արտահայտությունների արժեքների գումար : AVG([ALL | DISTINCT] expression) Թվաբանական արտահայտությունների արժեքների միջին : COUNT([ALL | DISTINCT] expression) Թվաբանական արտահայտությունների արժեքների քանակ : COUNT(*) Ընտրված տողերի քանակ MAX(expression) Թվաբանական արտահայտությունների արժեքների մաքսիմում : MIN(expression) Թվաբանական արտահայտությունների արժեքների մաքսիմում :
Having- խմբավորված տողերի ֆիլտրում Դիտարկենք նախորդ խնդիրը, բայց ավելացնենք պայման : Դիցուք մեզ հետաքրքրում են այն մատակարարներն ու նրաց մատակարարած ապրանքների գումարը, որոնց գումարը փոքր չէ ից : Հարցումը կունենա հետևյալ տեսքը.
SELECT SupplierID, SUM(UnitPrice*UnitsInStock) as Price FROM Products GROUP BY SupplierID HAVING SUM(UnitPrice*UnitsInStock)>3000
Խնդիրներ 1. Գտնել մատակարաներին և նրանց մատակարարած մոդելների քանակը : 2. Գտնել որ մատակարը քանի տեսակի ապրանք է մատակարարում : 3. Գտնել laptop- ների միջին գինը : 4. Գտնել յուրաքանչյուր երկրի կառուցած դասերի գլխավոր զենքի միջին տրամագիծը :
1. Գտնել Ships աղյուսակից յուրաքանչյուր դասի առաջին նավի ջուր իջեցման տարին : Կարգավորել տողերը ըստ դասի և ջուր իջեցման տարեթվի աճման կարգով : 2. Գտնել Paris-London չվերթ իրականացնող ավիաընկերությունների քանակը : 3. Գտնել յուրաքանչյուր ընդունման կերի հումքի դիմաց վճարված գումարը : 4. Գտնել այն ընդունման կետերը, որոնք ստացել են ից ավել գումար :
Ինքնուրույն կատարման համար 1. Գտնել մատանավերի այն դասերի անունները, որոնք 2 և ավելի նավ են ջուր իջեցրել : ( հաշվել միայն Ships աղյուսակի նավերը :) 2. Գտնել առաջին ծովամարտի ամսաթիվը :
1. Գտնել յուրաքանչյուր չվերթի, յուրաքանչյուր օրվա ուղղևորմերի քանակը : 2. Գտնել ուղևորներին, որոնք 2 և ավելի անգամ թռիչք են կատարել : 3. Գտնել այն ծովամարտերը, որոնցում ջրասույզ են եղել 2 և ավելի նավ : Ստանալ նաև յուրաքանչյուր ծովամարտում ջրասյուզ եղած նավերի քանակը :
1. Գտնել 64 և ավելի ram ունեցող համակարգիչնեչի նվազագույն գինը : 2. Գտնել laptop- ների յուրաքանչյուր էկրանի չափի համար միջին գինը :: Կարգավորել տողերը ըստ էկրանի չափի նվազման կարգով : 3. Գտնել ընդուման կետերը և օրերը, որտեղ կատարվել է 2 և ավել անգամ հումքի ընդունում : Առաջադրանքները ուղարկել հասցեով մինչև հաջորդ դասը նախորդող օրվա 18:00 կամ դասին տետրի մեջ :