Запросы WITH

Создадим таблицу для хранения оценок учеников.

CREATE TABLE marks
(
   student TEXT COLLATE "ucs_basic",
   mark INTEGER
);

Заполним таблицу данными.

INSERT INTO marks(student, mark) VALUES ('Maxim', 4);
INSERT INTO marks(student, mark) VALUES ('Maxim', 4);
INSERT INTO marks(student, mark) VALUES ('Maxim', 5);
INSERT INTO marks(student, mark) VALUES ('Alex', 3);
INSERT INTO marks(student, mark) VALUES ('Alex', 2);
INSERT INTO marks(student, mark) VALUES ('Piter', 4);
INSERT INTO marks(student, mark) VALUES ('Piter', 3);

Выведем информацию и среднюю оценку только тех учеников, у которых средняя оценка >= 3.

WITH middle_marks AS (SELECT student, AVG(mark) AS sredn FROM marks GROUP BY student)
SELECT * FROM middle_marks WHERE sredn >= 3;

Сначала создаётся временная таблица, в которой хранится информация о средней оценке каждого ученика.

Далее идёт выборка по условию из временной таблицы.

Last updated