CASE туюнтмалары жана шарттуу логика
SQL ар бир сапка маани тандап, маалыматты категорияларга бөлүп жана топтомдорду бир өтүүдө санасын
Негизги идея:
CASE - бул SQL тилинин if / else каражаты. Ал ар бир сапты карайт, шарттарды кезек менен текшерет жана биринчи чын болгон шарттын маанисин кайтарат. Бул туюнтма болгондуктан, аны SELECT тизмесине, ORDER BY ичине, WHERE ичине, атүгүл сизге керектүү саптарды так санаш үчүн SUM() сыяктуу агрегаттын ичине да коюуга болот.
Бул теманын аягында сиз төмөнкүлөрдү жасай аласыз:
CASEнын жөнөкөй жана изделүүчү формаларын жазуу,- саптарды белгилерге же баа диапазондоруна бөлүү,
- топтомдорду санаш жана пивот түзүү үчүн шарттуу агрегация үлгүсүн (
SUM(CASE ... )) колдонуу, NULLIFменен нөлгө бөлүүдөн коргонуу,IFNULL/COALESCEаркылууNULLди камдык маани менен алмаштыруу.
0. Мисал таблица
Төмөнкү ар бир суроо-талап экзамен жыйынтыктарынын бир кичине таблицасы боюнча иштейт. Кээ бир баалар NULL, анткени студент катышкан эмес, ал эми бир студентте attempts = 0 - эки факт тең кийин керек болот.
CREATE TABLE students (
student_id INT PRIMARY KEY,
full_name VARCHAR(50),
subject VARCHAR(20),
score INT, -- 0..100, эгер студент катышпаса NULL
attempts INT
);
INSERT INTO students VALUES
(1, 'Aida Nurlan', 'Math', 92, 1),
(2, 'Bekzat Orozov', 'Math', 58, 2),
(3, 'Chris Doyle', 'Math', NULL, 0),
(4, 'Dina Sultan', 'History', 74, 1),
(5, 'Erlan Kadyr', 'History', 45, 3),
(6, 'Farida Iman', 'Science', 88, 1),
(7, 'Gulnara Sadyk', 'Science', 63, 2),
(8, 'Hasan Umar', 'Science', NULL, 0);
Бул таблицаны эсиңизде сактаңыз: 8 студент, 3 предмет, эки катышпаган (баалары NULL).