SQL turli xil toifadagi ko'plab o'rnatilgan funktsiyalarni belgilaydi, ular orasida bi nechta satrlar ustunlari qiymatlarida ishlaydigan va bitta qiymatni qaytaradigai agregat funktsiyalari alohida o'rin egallaydi. Jadval ustunlari va ularning ustidag ifodalarning natijalari umumlashtiruvchi funktsiyalarning argumentlari bo'lish mumkin. Umumlashtiruvchi funktsiyalar boshqa arifmetik ifodalarga kiritilish mumkin. Quyidagi jadvalda eng ko'p ishlatiladigan standart birlashgan agrega funktsiyalari ko'rsatilgan.
ttJyHKIJHfl
Bo3Bpanj,a0Moe 3Hanemie
COUNT
KOJIHMECTBO 3HanGHMW B CTO/1S140 H/1H CTpOK B Ta6,n HI40
SUM
CyMMa
AVG
Cp0flH00
MIN
MHHMIViyM
MAX
MaKcmviyM
Yagona agregat funktsiyasining umumiy formati quyidagicha: function_name ([ALL | DISTINCT] ifoda)
m
bu erda DISTINCT funktsiya faqat argumentning har xil qiymatlarini hisobga olis] kerakligini va BARChA - barcha qiymatlarni, shu jumladan takroriy qiymatlarni (bi parametr sukut bo'yicha ishlatiladi) hisobga olish kerakligini bildiradi. Masalan, 1 1, 1 va 3 qiymatlari bo'lgan ustun satrlari uchun DISTINCT kalit so'zli AVC funktsiyasi 2 ni, agar ALL kalit so'z bo'lsa, u 1.5 ni qaytaradi.
Umumlashtirish vazifalari SELECT va HAVING iboralarida qo'llaniladi. Bu erda biz ularni SELECT gapida qanday ishlatilishini ko'rib chiqamiz. Bunday holda funktsiya argumentidagi ifoda SELECT iborasining kirish jadvalining barchi qatorlariga qo'llaniladi. Bundan tashqari, keyingi bo'limlarda muhokama qilinadigan GROUP BY iborasi bo'lmaganda, tanlangan vazifalarda va jadval ustunlarida (yok ular bilan ifodalangan) SELECT so'zlaridan foydalanib bo'lmaydi.
COUNT funktsiyasi ikkita formatga ega. Birinchi holda, kirish jadvalidagi satrla soni qaytariladi, ikkinchi holda, kirish jadvalidagi argument qiymatlari soni:
. COUNT (*)
. COUNT (ifoda)
Ushbu funktsiyadan foydalanishning eng oddiy usuli - jadvaldagi qatorlar sonin hisoblash (barchasi yoki belgilangan shartni qondiradiganlar). Buning uchun birinchi sintaksis variant ishlatiladi.
Talab: Ma'lumotlar bazasida mavjud bo'lgan mahsulotlar turlari soni.
TANLASH (*) AS "Mahsulotlar soni"
FROM Mahsuloti
COUNT funktsiyasining ikkinchi sintaksisida bitta ustun nomini argument sifatida ishlatish mumkin. Bunday holda, kirish jadvalining ushbu ustunidagi yoki faqa takrorlanmaydigan qiymatlarning soni hisoblanadi (DISTINCT kalit so'zidan foydalanib).
So'rov: Xaridor jadvalidagi turli xil nomlarning soni.
m
m
TANLASH (DISTINCT FNAME)
Qolgan birlashgan agregat funktsiyalaridan foydalanish COUNT ga o'xshashdir bundan tashqari MIN va MAX funktsiyalari uchun DISTINCT va ALL kali so'zlaridan foydalanish mantiqiy emas. COUNT, MAX va MIN funktsiyalarid; belgilarga qo'shimcha ravishda sonlardan tashqari foydalanish mumkin. Aga agregat funktsiyaning argumentida qiymatlar bo'lmasa, COUNT funktsiyasi 0 ni qolganlari esa NULLni qaytaradi.
SELECT MAX (OrdDate)
FROM
SQL tilida quyidagi ma'lumotlarni tanlash uchun so'rovlarni shakllantirish:
• Barcha buyurtmalarning umumiy qiymati;
• Xaridor jadvalida keltirilgan turli xil shaharlar soni.
Ma'lumotlar bazasida mavjud bo'lgan ma'lumotlarni umumlashtirish uchun SQL-da agregat vazifalari keltirilgan. Umumlashtiruvchi funktsiya ma'lumotlarning butui ustunini argument sifatida oladi va ma'lum bir tarzda bu ustunni umumlashtiradigan bitta qiymatni qaytaradi.
Masalan, AVG () agregat funktsiyasi argument sifatida raqamlar ustunini oladi va ularning o'rtacha qiymatini hisoblaydi.
Zelenogradda yashovchining jon boshiga o'rtacha daromadini hisoblash uchun sizga quyidagi so'rov kerak bo'ladi.
SQL-da har xil turdagi ma'lumotlarga ega bo'lish imkonini beradigan oltita agrega funktsiyalari mavjud (1-rasm):
- SUM () ustundagi barcha qiymatlarning yig'indisini hisoblaydi;
- AVG () ustundagi qiymatlarning o'rtacha qiymatini hisoblaydi;
- MIN () ustundagi barcha qiymatlarning eng kichigini topadi;
m
m
- MAX () ustundagi barcha qiymatlaming eng kattasini topadi;
- COUNT () ustundagi qiymatlar sonini hisoblaydi;
- COUNT (*) so'rov natijalari jadvalidagi qatorlar sonini hisoblaydi.
Umumiy funktsiyaning argumenti avvalgi misoldagi kabi oddiy ustun nomi yoki jon boshiga soliqni hisoblashni belgilaydigan quyidagi so'rovda ko'rsatilgan ibori bo'lishi mumkin:
AVGNI TANLASH (SUMD * 0.13)
Ushbu so'rov bajarilganda PERSON jadvalining har bir qatori uchun (SUMD * 0.13 qiymatlarni o'z ichiga olgan vaqtinchalik ustun yaratiladi va keyin vaqtinch; ustunning o'rtacha qiymati hisoblanadi.
Zelenogradning barcha aholisining umumiy daromadini SUM agregat funktsiyas yordamida hisoblash mumkin:
SHAXSIDAN YANGI (YoQING) TANLASH
Umumlashtirish funktsiyasidan bir nechta manba jadvallariga qo'shilish natijasid; olingan natijalar jadvaliga muvofiq hisoblash uchun foydalanish mumkin. Masalan "stipendiya" deb nomlangan manbadan rezidentlar olgan daromadlarning umumiy miqdorini hisoblashingiz mumkin:
Qaytarilgan ustunlar qatorida har qanday ustun nomining o'rniga siz agrega funktsiyasini belgilashingiz mumkin. Masalan, u ikkita umumlashtiruvch funktsiyalarning qiymatlari qo'shilgan yoki olib tashlanadigan ifodaga kiritilish mumkin:
SELECT MAX (SUMD) -MIN (SUMD) SHAXSNINGDAN
Ammo, agregat funktsiyasi boshqa agregat funktsiyasi uchun argument bo'la olmaydi, ya'ni. o'rnatilgan agregat funktsiyalari taqiqlanadi.
m
m
Masalan, oraliq natijani topish lozim bo‘lsin. Bu holda guruxlanishli so‘rov yordam beradi. YA’ni SELECT operatorining GROUP BY ifodasi. Avval GROUP BY ifodasi qatnashgan quyidagi so‘rovni ko‘ramiz: Xaar bir xizmatchi uchsun buyurtma o‘rtacha narxi qancha?
Select rep, avg(amount) from orders group by rep
REP maydoni bu xolda guruxlash maydonidir, ya’ni REP maydonning xamma qiymatlari guruxlarga ajratiladi va xar bir gurux uchun AVG(AMOUNT) ifodasi xisoblanadi! ya’ni quyidagilar bajariladi:
So‘rovlar xar bir xizmatchaga bittadan guruxga ajratiladi.Xar bir guruxda REP maydoni bir xil qiymatga ega.
Xar bir gurux uchun guruxga kiruvchi xamma satrlar bo‘yicha AMOUNT ustuni o‘rta qiymati xisoblanadi va bita natijaviy satr xosil qilinadi. Bu qator gurux uchun REP ustuni qiymati vash u gurux uchun so‘rov o‘rta qiymatini o‘z ichiga oladi.
SHunday qilib, GROUP BY ifodasi qo‘llanilgan so‘rov, "GURUXLANISHLI SO‘ROV " deb ataladi! SHu ifodadan keyin kelgan ustun "guruxlash ustuni " deyiladi. YAna bir necha guruxlanishli so‘rovlarni ko‘rib chiqamiz.
Xar bir ofis uchun sotuvlarning rejalashtirilgan xajmi diapazoni qancha?
Select rep_office, min(quota), max(quota) from salesreps group by rep_office
Yana bir so‘rov: Xar bir ofisda qancha xizmatchi ishlaydi?
Select rep_office, count(*) from salesreps group by rep_office
Yana bir guruxlanishli qiziqarli so‘rov: Xar bir xizmatchi nechta mijozga xizmat
m
ko‘rsatadi?
Select count(distinct cust_num), 'customers for salesreps', cust_rep from customers group by cust_rep
Bu erda 'CUSTOMERS FOR SALESREPS' psevdomaydonning ishlatilishiga e’tibortbering. So‘rov natijalarini bir nechta ustun bo‘yicha guruxlash mumkin. Masalan, quyidagicha:
Xar bir xizmatchi uchun xar bir klient bo‘yicha buyurtmalar umumiy sonini xisoblash.
Select rep, cust, sum(amount) from orders group by rep, cust
Lekin ikki ustun bo‘yicha guruxlashda natijalar ikki darajasiga ega guruxlar va ostki guruxlar yaratish mumkin emas. Lekin tartiblashni qo‘llash mumkin. SHu bilan birga GROUP BY ishlatilganda so‘rov natijalari avtomatik tartiblanadi. Quyidagi so‘rovni ko‘ramiz:
Xar bir xizmatchi uchun xar bir klient bo‘yicha buyurtmalar umumiy sonini xisoblash; so‘rov natijalarini klientlar va xizmatchilar bo‘yicha tartiblash.
Select rep, cust, sum(amount) from orders group by rep, cust order by rep, cust
Shunday qilib GROUP BY ifodasi SELECT ni guruxlarni qayta ishlashga majbur qiladi.