AXV

Aggregatsiya funksiyalari

COUNT(*) va COUNT(ustun), SUM, AVG, MIN, MAX, NULL qoidasi, AVG va butun son tuzog'i

9-sinfBusiness Intelligence6-hafta · 16-dars

Bugun nimalarni o'rganamiz?

Aggregatsiya

Ko'p qatordan bitta natija

NULL qoidasi

COUNT(*) va COUNT(ustun)

Tuzoqlar

AVG va butun son

Takrorlash

NULL bilan solishtirish qaysi yozuvda to'g'ri?

NULL faqat IS NULL yoki IS NOT NULL bilan tekshiriladi.
01

Aggregatsiya

Ko'p qatordan bitta natija

Aggregatsiya g'oyasi

Ko'p qator Funksiya Bitta qiymat AS bilan nom Ko'p qator → bitta natija

Mahsulotlar bo'yicha ko'rsatkichlar


SELECT COUNT(*)  AS MahsulotSoni,
       SUM(Soni) AS JamiDona,
       AVG(Narx) AS OrtachaNarx,
       MIN(Narx) AS EngArzon,
       MAX(Narx) AS EngQimmat
FROM Mahsulotlar;
-- 6 | 68 | 2158333.33 | 80000 | 7500000

SELECT COUNT(*) AS AksessuarSoni
FROM Mahsulotlar
WHERE Kategoriya = N'Aksessuar';
-- 3
  
Natijada 6 qator emas, bitta qator chiqadi. WHERE avval qatorlarni filtrlaydi, aggregatsiya esa faqat qolgan qatorlarni hisoblaydi.

Mini-test

SUM(Soni) nimani qaytaradi?

SUM — yig'indi.
02

NULL qoidasi

COUNT(*) va COUNT(ustun)

NULL qoidasi

COUNT(*) Barcha qator COUNT(ustun) NULLo'tkaziladi NULL aggregatsiyada hisobga olinmaydi

Sotuvlar jadvali va NULL


CREATE TABLE Sotuvlar (
    SotuvID    INT PRIMARY KEY,
    Sana       DATE,
    Shahar     NVARCHAR(20),
    Kategoriya NVARCHAR(30),
    Summa      DECIMAL(12,2),
    Miqdor     INT,
    Chegirma   DECIMAL(12,2) NULL
);
INSERT INTO Sotuvlar VALUES
 (1,  '2024-03-01', N'Toshkent',   N'Aksessuar', 160000,  2, 16000),
 (2,  '2024-03-01', N'Samarqand',  N'Kompyuter', 7500000, 1, NULL),
 (3,  '2024-03-02', N'Toshkent',   N'Ekran',     1900000, 1, 190000),
 (4,  '2024-03-02', N'Buxoro',     N'Aksessuar', 80000,   1, NULL),
 (5,  '2024-03-03', N'Samarqand',  N'Aksessuar', 240000,  2, 24000),
 (6,  '2024-03-03', N'Toshkent',   N'Kompyuter', 3200000, 1, NULL),
 (7,  '2024-03-04', N'Buxoro',     N'Kompyuter', 3200000, 1, 320000),
 (8,  '2024-03-04', N'Toshkent',   N'Aksessuar', 120000,  1, NULL),
 (9,  '2024-03-05', N'Samarqand',  N'Ekran',     1900000, 1, NULL),
 (10, '2024-03-05', N'Buxoro',     N'Aksessuar', 80000,   1, 8000);

SELECT COUNT(*)        AS Hammasi,      -- 10
       COUNT(Chegirma) AS ChegirmaBor,  -- 5
       SUM(Chegirma)   AS JamiChegirma, -- 558000
       AVG(Chegirma)   AS OrtachaChegirma  -- 111600
FROM Sotuvlar;
  
Bu skriptni mentor darsdan oldin ishga tushirib qo'yadi. Yuqoridagi natijalarni o'quvchilar o'z ekranida solishtirsin.

Mini-test

10 qatorning 5 tasida Chegirma NULL. COUNT(Chegirma) nechta?

NULL sanalmaydi: 10 − 5 = 5.
03

Tuzoqlar

AVG va butun son

Tuzoqlardan qochish

INT ustuni CAST yoki *1.0 WHERE qatornifiltrlaydi Aralash ustun— GROUP BY Natijani doim tekshiring

AVG va WHERE


SELECT AVG(Miqdor)                       AS ButunOrtacha,  -- 1
       AVG(CAST(Miqdor AS DECIMAL(10,2))) AS HaqiqiyOrtacha -- 1.200000
FROM Sotuvlar;

SELECT COUNT(*)   AS Soni,   -- 4
       SUM(Summa) AS Jami    -- 5380000
FROM Sotuvlar
WHERE Shahar = N'Toshkent';

SELECT MIN(Sana) AS Birinchi, MAX(Sana) AS Oxirgi
FROM Sotuvlar;              -- 2024-03-01 | 2024-03-05
  
Sana va matn ustunlarida MIN/MAX ham ishlaydi, SUM va AVG esa faqat sonli ustunlarda.

Mini-test

SQL Server'da INT ustunida AVG natijasi qanday bo'ladi?

Aniq natija uchun CAST(... AS DECIMAL) ishlating.

COUNT(*) va COUNT(ustun)

COUNT(*)

Barcha qatorlarni sanaydi (NULL ham)
VS

COUNT(ustun)

Faqat NULL bo'lmagan qiymatlarni sanaydi

Ustun bo'yicha sanash uchun COUNT(ustun).

Atamalar. Bosing

Aggregatsiya

bosing

Ko'p qatorni bitta qiymatga jamlash

COUNT

bosing

Qatorlar yoki qiymatlar soni

AVG

bosing

O'rtacha qiymat

Alias (AS)

bosing

Natija ustuniga berilgan nom

Aggregatsiya so'rovi

1. Jadvalni tanlang

FROM Sotuvlar.

2. Funksiyani tanlang

SUM, AVG, COUNT...

3. Nom bering

AS bilan.

Aggregatsiya funksiyalari

FunksiyaNima qiladiMisol natijasi
COUNT(*)Qatorlar soni10
SUM(Summa)Yig'indi18 380 000
AVG(Summa)O'rtacha1 838 000
MIN(Summa)Eng kichik80 000
MAX(Summa)Eng katta7 500 000

Sotuvlar jadvali bo'yicha

Birinchi hisobot

  1. Sotuvlar jadvalidagi barcha sotuvlar sonini COUNT(*) bilan toping.
  2. SUM(Summa) va AVG(Summa) ni bitta so'rovda chiqaring, ustunlarga nom bering.
  3. WHERE bilan faqat Buxoro sotuvlari yig'indisini hisoblang.

Chegirmalar soni


SELECT COUNT(*) AS ChegirmaBor
FROM Sotuvlar;
  

Chegirmalar soni


SELECT COUNT(Chegirma) AS ChegirmaBor
FROM Sotuvlar;
  

Sotuvlar raqamlarda

0
ta sotuv jadvalda
0
ta sotuvda chegirma bor
0
ta qator — aggregatsiya natijasi

COUNT(*) va COUNT(ustun) har doim bir xil emas.

Amaliy topshiriq 20 daqiqa

OsonSotuvlar soni: Sotuvlar jadvalidagi barcha qatorlar sonini toping.
OsonJami summa: Barcha sotuvlarning jami summasini hisoblang.
O'rtaNarx chegaralari: Mahsulotlardagi eng arzon va eng qimmat narxni bitta so'rovda chiqaring.
O'rtaToshkent hisoboti: Toshkentdagi sotuvlar soni va yig'indisini chiqaring.
QiyinChegirma tahlili: Nechta sotuvda chegirma borligini va o'rtacha chegirmani toping; so'ng NULL ni 0 deb hisoblab, barcha sotuvlar bo'yicha o'rtachani hisoblang.
BonusOmbor qiymati: Ombordagi barcha mahsulotlar qiymatini (Narx × Soni yig'indisi) hisoblang.

Dars xulosasi

Aggregatsiya

Ko'p qator → bitta qiymat.

NULL qoidasi

COUNT(*) dan boshqalar NULL ni o'tkazadi.

AVG tuzog'i

INT da butun natija; CAST ishlating.

Uyga vazifa: Mahsulotlar va Sotuvlar bo'yicha aggregatsiya so'rovlari.

Keyingi dars: GROUP BY

Guruhlash mexanizmi

6-hafta · 17-dars