Агрегирующие функции используются для получения обобщающих значений. Их можно применять ко всем строкам таблицы, строкам, определенным в предложении WHERE или к группам строк в предложении GROUP BY. В любом случае, независимо от структуры набора строк, для каждого из них получается единственное значение.

 

Для выполнения агрегирующих операций используются следующие функции:

COUNT определяет количество строк или значений поля, выбранных посредством запроса и не являющихся NULL-значениями;

SUM вычисляет сумму всех выбранных значений данного поля;

AVG вычисляет среднее значение для всех выбранных значений данного поля;

МАХ вычисляет наибольшее из всех выбранных значений данного поля;

MIN вычисляет наименьшее из всех выбранных значений данного поля.

 

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

 

Общая форма агрегирующей функции имеет следующий вид:

 

aggregate_function (<expr>)

Пример:

Найти средную стоимсть услуг:

SQL:

SELECT AVG(price) FROM tbl_service

С помощью следующего оператора можно найти среднюю стоимость всех услуг в случае удвоения их цены:

SQL:

SELECT AVG(price*2) FROM tbl_service

 

 

Подчиненный запрос состоит из инструкции SQL SELECT, находящейся внутри другого запроса на выборку или запроса на изменение. Эти инструк­ции вводятся в строку «Поле» бланка запроса для определения нового поля или в строку «Условие отбора» для определения условия отбора поля. Под­чиненные запросы используются для выполнения следующих действий:

  проверка в подчиненном запросе существования некоторых результатов
с помощью зарезервированных слов
EXISTS или NOT EXISTS;

Предикат exists имеет следующий синтаксис:

< exists predicate> ::= EXISTS <subquery>

Значением этого предиката всегда является true или false, и это значение равно true тогда и только тогда, когда результат вычисления подзапроса не пуст.

 

  поиск в главном запросе любых значений, которые равны, больше или
меньше значений, возвращаемых в подчиненном запросе (с помощью за­
резервированных слов
ANY, IN или ALL);

Оператор ANY берет все значения выведенные подзапросом, ( для этого случая - это все значения city в таблице Заказчиков ), и оценивает их как верные если любой(ANY) из их равняется значению города текущей строки внешнего запроса.

 

 

             


 ===============  SQL Execution Log ============

              | SELECT *                                      |

              | FROM  Salespeople                             |

              | WHERE city = ANY                              |

              | (SELECT  city                                 |

              | FROM Customers);                              |

              | ============================================= |

              |   cnum     cname     city         comm        |

              |  -----    --------   ----       --------      |

              |   1001    Peel       London         0.12      |

              |   1002    Serres     San Jose       0.13      |

              |   1004    Motika     London         0.11      |

                =============================================

Использование оператора ANY

 

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

SELECT *

FROM Customers

WHERE rating > ALL(

    SELECT rating

    FROM Customers

    WHERE city = 'Москва'

)

 

Мы можем также использовать оператор IN чтобы создать запрос аналогичный предыдущему :

 

             SELECT *

                FROM Salespeople

                WHERE city IN

                    ( SELECT city

                         FROM Customers );

.

              |   cnum     cname     city         comm        |

              |  -----    --------   ----       --------      |

              |   1001    Peel       London         0.12      |

              |   1002    Serres     San Jose       0.13      |

              |   1004    Motika     London         0.11      |

 

Однако, оператор ANY может использовать другие реляционные опера- торы кроме равняется ( = ), и таким образом делать сравнения которые являются выше возможностей IN. Например, мы могли бы найти всех продавцов с их заказчиками которые следуют им в алфавитном порядке.

 

Hosted by uCoz