Мазмунга өтүү

Маалыматты топтоо: GROUP BY жана HAVING

Программалоо SQL Татаалдыгы 1/5

Сабактын башталышы

Маалыматты топтоо: GROUP BY жана HAVING

Көп сапты ар бир топ үчүн бир таза сапка айландырабыз

Негизги идея: GROUP BY бирдей мааниси бар сапты топторго чогултат, анан агрегатты (мисалы COUNT же SUM) ар бир топ үчүн бир жолу аткарат. Андан кийин HAVING ошол агрегатка карап бүтүн топторду калтырат же алып салат.
Сабактын аягында сиз:
  • GROUP BY менен сап топторун түзө аласыз,
  • бир агрегат маанисин ар бир топ үчүн ала аласыз (саны, суммасы, орточосу, минимуму, максимуму),
  • HAVING аркылуу бүтүн топторду чыпкалай аласыз,
  • WHERE (сапты чыпкалайт) менен HAVING (топторду чыпкалайт) айырмалай аласыз,
  • топтолбогон жана агрегатталбаган мамычаны тандоо деген классикалык катадан качасыз.

1. "Топтоо" деген эмне?

Таза кийимдин чоң себетин элестетиңиз. Аны жыйыштыруудан мурун сиз аларды үймөккө бөлөсүз: бир үймөк байпак, бир үймөк көйнөк, бир үймөк сүлгү. Эми "канча байпак?" деген суроого жооп берүү оңой, себеби бардык байпак бир үймөктө.

SQLдеги топтоо сапка ушул эле нерсени жасайт. Сиз мамычаны тандайсыз, ошол мамычада бирдей мааниси бар ар бир сап бир эле үймөккө түшөт. Анан ар бир үймөк жөнүндө бир суроону бир учурда бере аласыз: канча? жалпы сумма канча? орточосу канча?

Өткөн сабакта сиз COUNT, SUM, AVG, MIN жана MAX агрегат функцияларын үйрөндүңүз. Өз алдынча алар бүт таблицаны бир санга кысат. GROUP BY ошол санды баарын бирдей эмес, ар бир үймөк үчүн алууга мүмкүндүк берет.

2. Мисал таблицабыз: жаныбарлар дүкөнү

Бүт сабакта биз бир кичинекей таблицаны колдонобуз — сатыкка коюлган жаныбарлардын тизмеси. Ал мына кантип түзүлүп, толтурулат.

CREATE TABLE pets (
  id      INT PRIMARY KEY,
  name    VARCHAR(20),
  species VARCHAR(10),
  age     INT,
  price   DECIMAL(6,2)
);

INSERT INTO pets (id, name, species, age, price) VALUES
  (1, 'Rex',    'dog',  3, 200.00),
  (2, 'Bella',  'dog',  5, 150.00),
  (3, 'Milo',   'cat',  2, 100.00),
  (4, 'Luna',   'cat',  4, 120.00),
  (5, 'Coco',   'cat',  1,  90.00),
  (6, 'Nemo',   'fish', 1,  20.00),
  (7, 'Goldie', 'fish', 2,  15.00);

Бүт таблица (SELECT * FROM pets;):

idnamespeciesageprice
1Rexdog3200.00
2Belladog5150.00
3Milocat2100.00
4Lunacat4120.00
5Cococat190.00
6Nemofish120.00
7Goldiefish215.00

Байкаңыз: species мамычасы кайталанат — эки ит, үч мышык, эки балык. Дал ушундай кайталанган мамыча топтоо үчүн эң ылайыктуу.

Бул сабакты YourAIZone платформасында улантыңыз

Толук сабакта — толук түшүндүрмө, чыгарылган мисалдар, көп кездешкен каталар, заматта текшерилүүчү тесттер жана ЖИ-репетитор. Конок катары дароо баштаңыз же прогрессти сактоо үчүн аккаунт түзүңүз.

Толук сабакта

  • Толук түшүндүрмө
  • Чыгарылган мисалдар
  • Көп кездешкен каталар жана алардан кантип качуу керек
  • Тест суроолору: 15
  • Тема боюнча суроолорго жооп берген ЖИ-репетитор
  • Окуучу, ата-эне жана мугалим үчүн прогрессти көзөмөлдөө