SQLite - 9 - подзапросы и вычисляемое поле в запросе

Опубликовано: 18 Октябрь 2024
на канале: Антон Рябенко / PYWEB
186
0

ВЛОЖЕННЫЕ ЗАПРОСЫ (ПОДЗАПРОСЫ)

это запрос в другом запросе 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 "месяц";