Menu
Coddy logo textTech

Подзапросы. Часть 2

Часть раздела Основы путешествия по SQL на Coddy — урок 39 из 72.

Существует три основных типа подзапросов:

  1. Скалярные подзапросы - Возвращает одно значение (одна строка, один столбец)
  2. Строковые подзапросы - Возвращает одну строку с несколькими столбцами
  3. Табличные подзапросы - Возвращает несколько строк и столбцов

Например, вот некоторые примеры использования для каждого типа подзапроса:

Скалярный подзапрос - Найти сотрудников, которые зарабатывают больше средней зарплаты:

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 (>, <, =)
  • Когда вам нужно сопоставить несколько столбцов
  • Когда вам нужно выполнять запрос из набора результатов
challenge icon

Задание

Легко

Доступные таблицы и столбцы:

  • shop: price, quantity, category, list_date

Найдите категории, где их общее количество превышает среднее всех количеств в магазине.

Важно: Вы должны использовать подзапрос внутри клаузы HAVING для вычисления среднего. Не используйте захардкоженное значение или отдельный запрос — подзапрос должен вычислять AVG(quantity) из таблицы shop напрямую внутри HAVING.

Шаги для решения:

  1. Сначала напишите подзапрос, который вычисляет среднее всех количеств в магазине: SELECT AVG(quantity) FROM shop
  2. Затем для каждой категории суммируйте их количества и сравните с этим подзапросом, используя ключевое слово HAVING

Шпаргалка

Существует три основных типа подзапросов:

  1. Скалярные подзапросы - Возвращает единственное значение (одна строка, один столбец)
  2. Строчные подзапросы - Возвращает одну строку с несколькими столбцами
  3. Табличные подзапросы - Возвращает несколько строк и столбцов

Скалярный подзапрос - Простые сравнения (>, <, =):

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;

Попробуйте сами

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы