Ko'pincha bizga jadvaldagi alohida qatorlar emas, balki ular haqidagi umumiy ma'lumot kerak bo'ladi: "Nechta mahsulot bor?", "Necha xil kategoriya bor?". Bunday savollarga agregat funksiyalar (aggregate functions) javob beradi.
Agregat funksiya ko'p qatorni qabul qiladi va ulardan bitta natija qiymatini hisoblaydi. Eng birinchi va eng ko'p ishlatiladigani — bu COUNT, ya'ni sanash.
Quyidagi mahsulotlar jadvali bilan ishlaymiz:
| id | nomi | kategoriya | narx | ombor |
|---|---|---|---|---|
| 1 | Telefon | Elektronika | 5000000 | 10 |
| 2 | Noutbuk | Elektronika | 12000000 | 5 |
| 3 | Quloqchin | Elektronika | 300000 | 50 |
| 4 | Kitob | Kitoblar | 50000 | 100 |
| 5 | Daftar | Kanstovar | 8000 | 200 |
| 6 | Ruchka | Kanstovar | 3000 | 500 |
| 7 | Stol | Mebel | 800000 | 15 |
| 8 | Stul | Mebel | 250000 | 40 |
Jadvalda nechta qator borligini bilish uchun COUNT(*) dan foydalanamiz. Bu eng oddiy shakl — u shunchaki qatorlarni sanaydi:
SELECT COUNT(*) FROM mahsulotlar;Bizning jadvalda 8 ta qator bor, shuning uchun natija:
8E'tibor bering: natija — bu jadval emas, faqat bitta son. Agregat funksiya barcha qatorlarni bitta qiymatga "yig'adi".
COUNT(*) ni WHERE bilan birga ishlatib, faqat shartga mos qatorlarni ham sanash mumkin. Masalan, narxi 1 milliondan qimmat nechta mahsulot borligini bilamiz:
SELECT COUNT(*) FROM mahsulotlar WHERE narx > 1000000;Bunga Telefon va Noutbuk mos keladi:
2Agar * o'rniga ustun nomini yozsak, COUNT shu ustundagi NULL bo'lmagan (bo'sh bo'lmagan) qiymatlarni sanaydi:
SELECT COUNT(kategoriya) FROM mahsulotlar;Bizning jadvalda hamma mahsulotning kategoriyasi to'ldirilgan (NULL yo'q), shuning uchun natija yana:
8Eslatma:
COUNT(*)har doim barcha qatorlarni sanaydi.COUNT(ustun)esa faqat o'sha ustunda qiymati bor (NULL bo'lmagan) qatorlarni sanaydi. Agar ustunda bo'sh (NULL) qiymatlar bo'lsa, bu ikki natija farq qiladi.
Eng foydali shakllardan biri — COUNT(DISTINCT ustun). U ustundagi takrorlanmas (noyob) qiymatlar sonini hisoblaydi.
Masalan, kategoriya ustunida Elektronika 3 marta, Kanstovar 2 marta, Kitoblar va Mebel bir martadan uchraydi. Agar shunchaki COUNT(kategoriya) desak, 8 chiqadi. Lekin bizga necha XIL kategoriya borligi kerak:
SELECT COUNT(DISTINCT kategoriya) FROM mahsulotlar;Bu so'rov takrorlarni hisobga olmaydi va noyob kategoriyalar sonini qaytaradi:
4Ya'ni do'konda jami 4 xil kategoriya bor: Elektronika, Kanstovar, Kitoblar va Mebel.
Muhim:
COUNT(DISTINCT ustun)avval takror qiymatlarni olib tashlaydi, keyin nechtasi qolganini sanaydi. Bu "necha xil ... bor?" degan savollarga javob berishning eng oson yo'li.
Pastdagi kod oynasida mahsulotlar jadvali allaqachon yaratilgan va to'ldirilgan. Sizning vazifangiz — mahsulotlar jadvalida nechta xil (noyob) kategoriya borligini COUNT(DISTINCT ...) yordamida sanab chiqaruvchi SELECT so'rovini yozish.