Сотрудники отдела 90
Фильтр по точному значению числового столбца.
SELECT *
FROM employees
WHERE department_id = 90;
hr: WHERE, LIKE, CASE, AVG.world: JOIN + фильтр IsOfficial = 'T'; больше всего строк — у стран с языками.Airlines: GROUP BY, JOIN для билетов, RANK() OVER во вложенном запросе.Фильтр по точному значению числового столбца.
SELECT *
FROM employees
WHERE department_id = 90;
Числовое сравнение в WHERE.
SELECT first_name, last_name, salary
FROM employees
WHERE salary > 5000;
Шаблон 'L%' находит строки, начинающиеся с L.
SELECT first_name, last_name
FROM employees
WHERE last_name LIKE 'L%';
Два условия на строковые столбцы соединены через AND.
SELECT salary
FROM employees
WHERE first_name = 'Lex' AND last_name = 'De Haan';
Условное выражение формирует флаг: 1 — зарплата выше 10000, иначе 0.
SELECT first_name, last_name, salary,
CASE
WHEN salary > 10000 THEN 1
ELSE 0
END AS salary_group
FROM employees;
Сначала отбираем нужные строки через WHERE, затем считаем среднее.
SELECT AVG(salary) AS avg_salary
FROM employees
WHERE salary < 10000;
Соединяем country и city по идентификатору столицы.
SELECT country.Name AS country_name, city.Name AS capital
FROM country
JOIN city ON country.Capital = city.ID;
Соединяем страны со всеми языками.
SELECT country.Name AS country_name, countrylanguage.Language
FROM country
JOIN countrylanguage ON country.Code = countrylanguage.CountryCode;
Добавляем фильтр на официальность языка.
SELECT country.Name AS country_name, countrylanguage.Language
FROM country
JOIN countrylanguage ON country.Code = countrylanguage.CountryCode
WHERE countrylanguage.IsOfficial = 'T';
Выполняем три отдельных запроса COUNT(*). Больше всего строк будет в запросе 2.2, потому что одна страна может иметь много языков; меньше всего — в запросе 2.3, где остаются только официальные языки.
SELECT COUNT(*) FROM country JOIN city ON country.Capital = city.ID;
SELECT COUNT(*) FROM country JOIN countrylanguage ON country.Code = countrylanguage.CountryCode;
SELECT COUNT(*) FROM country JOIN countrylanguage ON country.Code = countrylanguage.CountryCode
WHERE countrylanguage.IsOfficial = 'T';
Группировка по модели с подсчётом строк.
SELECT model, COUNT(*) AS aircraft_count
FROM aircraft
GROUP BY model;
Группировка по стране регистрации самолёта.
SELECT country, COUNT(*) AS aircraft_count
FROM aircraft
GROUP BY country;
Группировка рейсов по полю plane.
SELECT plane, COUNT(*) AS trip_count
FROM trips
GROUP BY plane;
Оконная функция AVG() OVER () добавляет общее среднее к каждой строке без группировки.
SELECT id, price, AVG(price) OVER () AS avg_price
FROM tickets;
Классическая группировка с агрегатной функцией.
SELECT service_class, AVG(price) AS avg_price
FROM tickets
GROUP BY service_class;
Соединяем рейсы и билеты, группируем по рейсу и сортируем по убыванию.
SELECT trips.id, trips.trip_no, COUNT(tickets.id) AS ticket_count
FROM trips
JOIN tickets ON trips.id = tickets.trip_id
GROUP BY trips.id, trips.trip_no
ORDER BY ticket_count DESC;
Сначала агрегируем данные во вложенном запросе, затем ранжируем полученный набор через RANK() OVER.
SELECT id, trip_no, ticket_count,
RANK() OVER (ORDER BY ticket_count DESC) AS trip_rank
FROM (
SELECT trips.id, trips.trip_no, COUNT(tickets.id) AS ticket_count
FROM trips
JOIN tickets ON trips.id = tickets.trip_id
GROUP BY trips.id, trips.trip_no
) AS trip_stats;