Skip to content

Latest commit

 

History

History
169 lines (135 loc) · 3.99 KB

File metadata and controls

169 lines (135 loc) · 3.99 KB

ROLL UP

Ushbu qo'llanmada siz bir nechta guruhlash to'plamlarini yaratish uchun PostgreSQL ROLLUP-dan qanday foydalanishni o'rganasiz.

PostgreSQL ROLLUP - bu GROUP BY bandining kichik bandi bo'lib, u bir nechta guruhlash to'plamlarini aniqlash uchun stenografiyani taklif qiladi. Guruhlash to'plami - bu siz guruhlaydigan ustunlar to'plami. Batafsil ma'lumot uchun guruhlash to'plamlari qo'llanmasini ko'rib chiqing.

CUBE kichik bandidan farqli o'laroq, ROLLUP belgilangan ustunlar asosida barcha mumkin bo'lgan guruhlash to'plamlarini yaratmaydi. Bu shunchaki ularning kichik to'plamini yaratadi.

ROLLUP kirish ustunlari orasidagi ierarxiyani qabul qiladi va ierarxiyani hisobga olgan holda mantiqiy bo'lgan barcha guruhlash to'plamlarini yaratadi. Shuning uchun ROLLUP ko'pincha hisobotlar uchun oraliq jamlamalar va umumiy jami yaratish uchun ishlatiladi.

Masalan, CUBE (c1,c2,c3) barcha mumkin bo'lgan sakkizta guruhlash to'plamini yaratadi:

(c1, c2, c3)
(c1, c2)
(c2, c3)
(c1,c3)
(c1)
(c2)
(c3)
()

Biroq, ROLLUP(c1,c2,c3) c1 > c2 > c3 ierarxiyasini quyidagi tarzda qabul qilib, faqat to'rtta guruhlash to'plamini hosil qiladi:

(c1, c2, c3)
(c1, c2)
(c1)
()

ROLLUP dan keng tarqalgan foydalanish ierarxiya yil > oy > sanani hisobga olgan holda yil, oy va sana boʻyicha maʼlumotlar yigʻindisini hisoblashdir.

Quyida PostgreSQL ROLLUP sintaksisi tasvirlangan:

SELECT
    c1,
    c2,
    c3,
    aggregate(c4)
FROM
    table_name
GROUP BY
    ROLLUP (c1, c2, c3);

Yaratilgan oraliqlar sonini kamaytirish uchun qisman yig'ish ham mumkin.

SELECT
    c1,
    c2,
    c3,
    aggregate(c4)
FROM
    table_name
GROUP BY
    c1, 
    ROLLUP (c2, c3);

PostgreSQL ROLLUP misollari

Agar siz savdo jadvalini yaratmagan bo'lsangiz, quyidagi skriptdan foydalanishingiz mumkin:

DROP TABLE IF EXISTS sales;
CREATE TABLE sales (
    brand VARCHAR NOT NULL,
    segment VARCHAR NOT NULL,
    quantity INT NOT NULL,
    PRIMARY KEY (brand, segment)
);

INSERT INTO sales (brand, segment, quantity)
VALUES
    ('ABC', 'Premium', 100),
    ('ABC', 'Basic', 200),
    ('XYZ', 'Premium', 100),
    ('XYZ', 'Basic', 300);

Quyidagi so'rovda brend bo'yicha (jami jami) va barcha brendlar va segmentlar (jami) bo'yicha sotilgan mahsulotlar sonini topish uchun ROLLUP bandidan foydalaniladi

SELECT
    brand,
    segment,
    SUM (quantity)
FROM
    sales
GROUP BY
    ROLLUP (brand, segment)
ORDER BY
    brand,
    segment;

output

Chiqarishdan aniq ko'rinib turibdiki, uchinchi qatorda ABC brendining sotuvi, oltinchi qatorda XYZ brendining sotuvi ko'rsatilgan.Oxirgi qatorda barcha brendlar va segmentlar uchun umumiy summa ko'rsatilgan. Bu misolda ierarxiya brand > segment hisoblanadi.

Agar siz brend va segment tartibini o'zgartirsangiz, natija quyidagicha farq qiladi:

SELECT
    segment,
    brand,
    SUM (quantity)
FROM
    sales
GROUP BY
    ROLLUP (segment, brand)
ORDER BY
    segment,
    brand;

output

Bunday holda, ierarxiya segment > branddir.

Quyidagi bayonot qisman yig'ishni amalga oshiradi:

SELECT
    segment,
    brand,
    SUM (quantity)
FROM
    sales
GROUP BY
    segment,
    ROLLUP (brand)
ORDER BY
    segment,
    brand;

output

Namunaviy maʼlumotlar bazasidan quyidagi ijara jadvaliga qarang.

table

Quyidagi bayonot ROLLUP yordamida kunlik, oylik va yildagi ijaralar sonini topadi:

SELECT
    EXTRACT (YEAR FROM rental_date) y,
    EXTRACT (MONTH FROM rental_date) M,
    EXTRACT (DAY FROM rental_date) d,
    COUNT (rental_id)
FROM
    rental
GROUP BY
    ROLLUP (
        EXTRACT (YEAR FROM rental_date),
        EXTRACT (MONTH FROM rental_date),
        EXTRACT (DAY FROM rental_date)
    );

output

Ushbu qo'llanmada siz bir nechta guruhlash to'plamlarini yaratish uchun PostgreSQL ROLLUPdan qanday foydalanishni o'rgandingiz.