Использование подзапросов в качестве вычисляемых полей

  • Автор записи:
  • Запись опубликована:08.01.2024
  • Рубрика записи:SQL

В прошлой статье мы рассматривали использование подзапросов для получения списка клиентов. Однако, существует еще способ, как можно использовать подзапросы – для создания вычисляемых полей.

Предположим, необходимо вывести общее число заказов, сделанных каждым клиентом таблицы Customers (подробнее про БД смотрите в прошлой статье). Чтобы выполнить этот запрос потребуется сделать следующее:

  1. Извлечь список клиентов из таблицы Customers.
  2. Для каждого клиента подсчитать количество заказов в таблице Orders.

Для подсчета строк в таблице можно воспользоваться инструкцией SELECT COUNT(*), а через WHERE фильтровать по конкретному клиенту. Попробуем для примера взять один cust_id.

SELECT COUNT(*) AS orders FROM Orders
WHERE cust_id = 1000000001
orders

Для того, чтобы получить информацию через COUNT(*) для каждого клиента, используем это выражение как подзапрос.

SELECT cust_name, cust_state, (
    SELECT COUNT(*) FROM Orders
    WHERE Orders.cust_id = Customers.cust_id
    ) AS orders
FROM Customers
WHERE orders > 0
ORDER BY cust_name

Инструкция возвращает 3 столбца – cust_name, cust_state и orders. Поле orders вычисляемое, оно сформировано в результате выполнения подзапроса. Подзапрос выполняется один раз для каждого клиента.

Предложение WHERE в подзапросе были использованы полные имена столбцов. Это требуется, чтобы сравнивались значения cust_id из двух таблиц, так как такие названия есть в 2ух таблицах. Без использования полных имен СУБД будет считать, что мы сравниваем cust_id в таблице Orders с самим собой.

Несмотря на то, что запрос корректен, зачастую он оказывается не самым эффективным способом извлечения данных такого рода. В следующих статьях мы рассмотрим иные примеры.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.