ВЛОЖЕННЫЕ ЗАПРОСЫ (ПОДЗАПРОСЫ)
это запрос в другом запросе SQLite, встроенный в предложение WHERE
например, мы хотим вывести котиков, чей возраст больше среднего
по группе
мы можем сначала выяснить, чему равен средний возраст
SELECT AVG(age)
FROM cats;
а потом создать запрос с условием
SELECT name, breed, age
FROM cats
WHERE age больше 5.25;
(вместо "больше" имеем в виду соотв. знак, который нельзя использовать в описании
видео Youtube)
или можно сразу вложить запрос
SELECT name, breed, age
FROM cats
WHERE age больше (
SELECT AVG(age)
FROM cats
);
ВЫЧИСЛЯЕМЫЕ ПОЛЯ ЗАПРОСА И ГРУППИРОВКА ПО НЕСКОЛЬКИМ АТРИБУТАМ
Мы хотим рассчитать зарплату докторов по месяцам,
исходя из того, что они получают 30% от выручки за процедуры
начнем с того, что посчитаем общую выручку докторов
SELECT doctors.name, SUM(procedures.price)
FROM journal INNER JOIN doctors
ON journal.doc_id = doctors.id
INNER JOIN procedures
ON journal.proc_id = procedures.id
GROUP BY doctors.name;
ОК, теперь добавим в аналитику месяц
SELECT doctors.name AS "док",
strftime("%m", journal.date) AS "месяц",
SUM(procedures.price) AS "сумма выручки"
FROM journal INNER JOIN doctors
ON journal.doc_id = doctors.id
INNER JOIN procedures
ON journal.proc_id = procedures.id
GROUP BY "док", "месяц"
ORDER BY "месяц";
нам осталось добавить вычисляемое поле "зарплата"
SELECT doctors.name AS "док",
strftime("%m", journal.date) AS "месяц",
SUM(procedures.price) AS "сумма выручки",
SUM(procedures.price) * 0.3 AS "зарплата"
FROM journal INNER JOIN doctors
ON journal.doc_id = doctors.id
INNER JOIN procedures
ON journal.proc_id = procedures.id
GROUP BY "док", "месяц"
ORDER BY "месяц";