Подзапросы. Часть 2
Часть раздела Основы путешествия по SQL на Coddy — урок 39 из 72.
Существует три основных типа подзапросов:
- Скалярные подзапросы - Возвращает одно значение (одна строка, один столбец)
- Строковые подзапросы - Возвращает одну строку с несколькими столбцами
- Табличные подзапросы - Возвращает несколько строк и столбцов
Например, вот некоторые примеры использования для каждого типа подзапроса:
Скалярный подзапрос - Найти сотрудников, которые зарабатывают больше средней зарплаты:
SELECT name, salary
FROM employees
WHERE salary > (
SELECT AVG(salary)
FROM employees
);Подзапрос строки — Найти сотрудника(ов) с тем же отделом и зарплатой, что у Alice
SELECT name
FROM employees
WHERE (department, salary) = (
SELECT department, salary
FROM employees
WHERE name = 'Alice'
);Таблицеобразующие подзапросы - Показать отделы и количество сотрудников
SELECT department, count
FROM (
SELECT department, COUNT(*) as count
FROM employees
GROUP BY department
) as dept_counts;Обратите внимание на случаи использования:
- Scalar - Simple comparisons (>, <, =)
- Когда вам нужно сопоставить несколько столбцов
- Когда вам нужно выполнять запрос из набора результатов
Задание
ЛегкоДоступные таблицы и столбцы:
shop:price,quantity,category,list_date
Найдите категории, где их общее количество превышает среднее всех количеств в магазине.
Важно: Вы должны использовать подзапрос внутри клаузы HAVING для вычисления среднего. Не используйте захардкоженное значение или отдельный запрос — подзапрос должен вычислять AVG(quantity) из таблицы shop напрямую внутри HAVING.
Шаги для решения:
- Сначала напишите подзапрос, который вычисляет среднее всех количеств в магазине:
SELECT AVG(quantity) FROM shop - Затем для каждой категории суммируйте их количества и сравните с этим подзапросом, используя ключевое слово
HAVING
Шпаргалка
Существует три основных типа подзапросов:
- Скалярные подзапросы - Возвращает единственное значение (одна строка, один столбец)
- Строчные подзапросы - Возвращает одну строку с несколькими столбцами
- Табличные подзапросы - Возвращает несколько строк и столбцов
Скалярный подзапрос - Простые сравнения (>, <, =):
SELECT name, salary
FROM employees
WHERE salary > (
SELECT AVG(salary)
FROM employees
);Строчный подзапрос - Совпадение нескольких столбцов:
SELECT name
FROM employees
WHERE (department, salary) = (
SELECT department, salary
FROM employees
WHERE name = 'Alice'
);Табличный подзапрос - Запрос из результирующего набора:
SELECT department, count
FROM (
SELECT department, COUNT(*) as count
FROM employees
GROUP BY department
) as dept_counts;Попробуйте сами
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Больше ключевых слов
Ключевое слово INКлючевое слово BETWEENКлючевое слово LIKEКлючевое слово ASПовторение - Модели мобильных телефонов2Условия
Основы условийКлючевое слово ANDКлючевое слово ORКлючевое слово NOTКомбинирование нескольких условийСкобкиБулевы значения5Арифметические операции
Математические операторыМатематические столбцыОперация moduloФункция ROUND()3Специальный формат возврата
Значения NULLСортировка результатов, часть 1Сортировка результатов, часть 2Повторение - Фирма по кибербезопасностиОграничение количества записейПовторение - Автозавод6Вводные вызовы
Повторение - Парламентские выборыПовторение - Арест преступника полициейПовторение - Ёмкость для напитков в бареПовторение - Создание новых столбцов