Sql Scholl
Распечатать страницу
Перейти на главную Карта сайта Отправить сообщение

Расширенные объединения

Использование объединений со статистическими функциями

       Как вы узнали из урока 9, "Суммирование данных", статистические функции применяют для получения статистических сведений о данных. Хотя во всех до сих пор рассмотренных примерах посредством статистических функций получались данные только для одной таблицы, эти функции можно использовать также по отношению к объединениям.

      Рассмотрим пример. Допустим, вы хотите выбрать список всех клиентов и число сделанных ими заказов. Чтобы получить искомое, в следующем коде применяется функция COUNT() .

SELECT Customers.cust_id, COUNT(Orders.order_num) AS num_ord
FROM Customers INNER JOIN Orders
ON Customers.cust_id = Orders.cust_id GROUP BY Customers.cust_id; 



cust_id      num_ord 
-----------  -------------
1000000001   2 
1000000003   1 
1000000004   1 
1000000005   1

      В этом операторе SELECT используются ключевые слова INNER JOIN для связи таблиц Customers и Orders между собой. Предложение GROUP BY служит для получения итоговых данных по клиентам, и, таким образом, обращение к функции COUNT (Orders.order_num) позволяет подсчитать количество заказов каждого клиента и возвратить результат в виде столбца num_ord.

      Статистические функции можно использовать с объединениями других типов:

SELECT Customers.cust_id, COUNT(Orders.order_num) AS
num_ord
FROM Customers LEFT OUTER JOIN Orders
ON Customers.cust_id = Orders.cust_id GROUP BY Customers.cust_id; 



cust_id      num_ord 
----------   ----------------
1000000001   2
1000000002   0
1000000003   1
1000000004   1
1000000005   1

      В этом примере используется левое внешнее объединение для включения в результат всех клиентов, даже тех, которые не сделали ни одного заказа. Как видите, клиент 1000000002 также включен в результат, хотя на данный момент у него было 0 заказов.