Where not exists ( select cost

FROM PRODOCTS_TBL

WHERE COST > 100 ) ;

Вывод:

MAX(COST)

---------

59.99

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

NOT UNIQUE

Ключевое слово NOT UNIQUE используется как отрицание UNIQUE.

Пример_____________________________________Значение______

WHERE NOT UNIQUE (SELECT SALARY Проверка SALARY на наличие неуни-

FROM EMPLOYEE_TBL) кальных значений

Арифметические операции

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

• + (сложение);

• * (умножение);

• - (вычитание);

• / (деление).

Сложение

Сложение представлено знаком "+".

Пример_____________________________Значение__________________

SELECT SALARY + BONUS Значение SALARY складывается со значе-

FROM EMPLOYEE_PAY_TBL; нием BONUS для каждой строки данных

SELECT SALARY FROM EMPLOYEE_PAY_TBL Выбор строк, ДЛЯ которых сумма

WHERE SALARY + BONUS > '40000'; SALARY И BONUS Превышает 40000

Вычитание

Вычитание представлено знаком "-".

Пример________________________Значение________________

SELECT SALARY - BONUS Значение BONUS вычитается из зна-

FROM EMPLOYEE_PAY_TBL; ченияSALARY

SELECT SALARY FROM EMPLOYEE_PAY_TBL Выбор строк, для которых разность

WHERE SALARY - BONUS > '40000'; SALARY И BONUS Превышает 40000

Умножение

Умножение представлено знаком "*".

Пример_______________________Значение_______________________

SELECT SALARY * 10 Значение SALARY умножается на 10

FROM EMPLOYEE_PAY_TBL;

SELECT SALARY FROM EMPLOYEE_PAY_TBL Выбор строк, для которых значение

WHERE SALARY * 10 > '40000',- SALARY, умноженное на 10, превышает

В следующем примере текущее значение зарплаты умножается на 1.1, что означает увеличение на 10%.

Ввод:

SELECT EMP_ID, PAY_RATE, PAY_RATE * 1.1

FROM EMPLOYEE_PAY_TBL

WHERE PAY_RATE IS NOT NULL;

Вывод:

EMP_ID PAY_RATE PAY_RATE*1.1

44234688Э 14.75 16.225

220984332 11 12.1

443679012 15 16.5

3 строки выбраны.

Деление

Деление представлено знаком "/" (косой чертой).

Пример________________________________Значение_______

SELECT SALARY /10 Значение SALARY делится на 10

FROM EMPLOYEE_PAY_TBL;

SELECT SALARY FROM EMPLOYEE_PAY_TBL Выбор строк, для которых значение

WHERE SALARY / 10 > '40000'; SALARY, деленное на 10, превышает 40000

Комбинирование арифметических операций

Арифметические операции можно комбинировать. Вспомните о порядке операций из курса элементарной математики. Сначала выполняются операции умножения и деления, а затем — операции сложения и вычитания. Пользователь может управлять порядком выполнения операций в выражении только с помощью скобок. Заключенное в скобки выражение означают необходимость рассматривать выражение как единый блок.

Порядок выполнения операций (приоритет операций) задает порядок, в котором обрабатываются выражения в математических выражениях или встроенных функциях SQL.

Выражение___________Результат___________

1 + 1*5 6

(1 + 1) * 5 10

10-4/2+1 9

(10 - 4) / (2 + 1) 2

В следующих примерах использование скобок не влияет на результат, поскольку используется только умножение и деление. Эти операции имеют одинаковые приоритеты. Маловероятно, чтобы нашлась какая-нибудь реализация SQL, не следующая в этом вопросе стандартам ANSI, но в принципе такое возможно.

Выражение___________Результат_________

4*6/2 12

(4 * 6) / 2 12

4 * (6 / 2) 12

Вот еще несколько примеров.

SELECT SALARY * 10 + 1000

FROM EMPLOYEE_PAY_TBL

WHERE SALARY > 20000;

SELECT SALARY / 52 + BONUS

FROM EMPLOYEE_PAY_TBL;

SELECT (SALARY - 1000 + BONUS) / 52 * 1.1

FROM EMPLOYEE_PAY_TBL;

Следующий пример выглядит весьма странно с точки зрения его смысла.

SELECT SALARY

FROM EMPLOYEE_PAY_TBL

WHERE SALARY < BONUS *3+10/2-50;

Поскольку скобки в данном случае не используются, задаваемое ключевым словом WHERE выражение обрабатывается в порядке приоритетов операций.

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

Лекция 5.5

Итоговые функции


Литература

  • Введение в SQL
  • Введение в стандарты языка баз данных SQL
  • Структуризированный язык запросов (SQL)
  • Реализация языка SQL в СУБД MySQL
  • PL/SQL в Oracle
  • Двадцать пять заповедей SQL - Сергей Кузнецов
  • Лекции по SQL" Карпукова - 227 стр.
  • Краткое пособие по языку SQL

Содержание

  • Что такое итоговые функции?
  • Функция COUNT
  • Функция SUM
  • Функция AVG
  • Функция MAX
  • Функция MIN

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

Что такое итоговые функции?

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

В ходе этого урока мы обсудим следующие итоговые функции.

• COUNT
• SUM
• MAX
• MIN
• AVG

Следующие запросы показывают данные, которые используются для большинства примеров данного урока.

Ввод:

SELECT *

FROM PRODUCTS_TBL;

Вывод:

PROD_ID PROD_DESC COST

11235 КОСТЮМ ВЕДЬМЫ 29.99

222 ПЛАСТИКОВЫЕ ТЫКВЫ 7.75

13 ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ 1.1

90 ФОНАРИ 14.5

15 КОСТЮМЫ В АССОРТИМЕНТЕ 10

9 СЛАДКАЯ КУКУРУЗА 1.35

6 ТЫКВЕННЫЕ КОНФЕТЫ 1.45

87 ПЛАСТИКОВЫЕ ПАУКИ 1.05

119 МАСКИ В АССОРТИМЕНТЕ 4.95

1234 ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ 5.95

2345 ПОЛОМКА ИЗ ДУБА 59.99

11 строк выбраны.

Как видно из следующего запроса, не все служащие имеют номера пейджеров.

Ввод:

SELECT EMP_ID, LAST_NAME, FIRST_NAME, PAGER

FROM EMPLOYEE_TBL;

Вывод:

EKP_ID LAST_NAME FIRST_NAME PAGER

311549902 STEPHENS TINA

4423468b9 PLEW LINDA

213764555 GLASS BRANDON 3175709980

313782439 GLASS JACOB 8887345678

220984332 WALLACE MARIAH

443679012 SPURGEON TIFFANY

6 строк выбраны.

Функция COUNT

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

Синтаксис оператора функции COUNT следующий

COUNT [ (*) | (DISTINCT | ALL) J (имя_столбца)

Команда DISTINCT не используется с COUNT(*), а используется только с COUNT(имя_столбца)

Пример _______________________________ Значение ____________________

SELECT COUNT (EMP_ID) Подсчет числа табельных номеров всех слу-

FROM EMPLOYEE__PAY_TBL; жащих

SELECT COUNT (DISTINCT SALARY) Подсчет только разных строк

FROM EMPLOYEE_PAY_TBL;

SELECT COUNT (ALL SALARY; Подсчет всех строк для SALARY

FROM EMPLOYEE_PAY_TBL;

SELECT COUNT (*) Подсчет всех строк таблицы EMPLOYEE_TBL

FROM EMPLOYEE_TBL;

В следующем примере COUNT (*) используется для подсчета всех записей в таблице EMPLOYEE_TBL. В ней оказывается 6 строк с данными о служащих.

Ввод:

SELECT COUNT(*)

FROM EMPLOYEE_TBL;

Вывод:

COUNT (*)

---------

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

Ввод:

SELECT COUNT(EMP_ID)

FROM EMPLOYEE_TBL;

Вывод:

COUNT(EMP_ID)

------------

В следующем примере используется COUNT (PAGER) , чтобы подсчитать число всех служащих, имеющих номера пейджеров. Имеется только два таких служащих

Ввод:

SELECT COUNT(PAGER)

FROM EMPLOYEEJTBL;

Вывод:

COUNT(PAGER)

------------

В следующем примере используется таблица OPDERS_TBL.

Ввод:

SELECT *

FROM ORDERS_TBL;

Вывод:

ORD_NUM CUST_ID PROD__ID QTY ORD_DATE

56A901 232 11235 1 22-OCT-99

56A917 12 907 100 30-SEP-99

32A132 43 222 25 10-OCT-99

16C17 090 222 2 17-OCT-99

18D778 287 90 10 17-OCT-99

23E934 432 13 20 15-OCT-99

90C461 560 1234 2

7 строк выбраны.

Подсчитаем в этой таблице число различных кодов товаров.

Ввод:

SELECT COUNT(DISTINCT(PROD_ID))

FROM ORDERS_TBL;

Вывод:

COUNT(DISTINCT(PROD_ID))

-----------------------

Для PROD_ID значение 222 встречается дважды, в результате подсчет различных значений возвращает б, а не 7.

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

Функция SUM

Функция SUM используется для подсчета суммы значений в столбце для заданной группы строк. Функцию зим можно использовать вместе с ключевым словом DISTINCT. При использовании ключевого слова DISTINCT повторно встречающиеся значения в сумму не включаются. В этом случае итог не будет полной суммой, поскольку некоторые строки могут быть при суммировании пропущены.

Синтаксис оператора функции зим следующий.

SUM ([ DISTINCT ] имя_столбца )

При использовании функции зим тип значения в столбце предполагается числовым. Функцию зим нельзя использовать по отношению к столбцам с символьными значениями или значениями дат и времени.

Пример _______________________________ Значение __________________

SELECT SUM (SALARY) Подсчет суммы зарплат всех служащих

FROM EMPLOYEE_PAY_TBL;

SELECT SUM (DISTINCT SALARY) Подсчет суммы зарплат всех служащих без

FROM EMPLOYEE_PAY_TBL; учета повторяющихся значений

Подсчитаем сумму всех значений стоимости товаров из таблицы PRODUCT S_TBL.

Ввод:

SELECT SUM(COST)

FROM PRODUCTSJTBL;

Вывод:

SUM(COST)

---------------

163.07

Функция AVG

Функция AVG используется для подсчета среднего для значений заданной группы строк. При использовании с ключевым словом DISTINCT повторно встречающиеся значения в среднем не учитываются.

Синтаксис оператора функции AVG следующий.

AVG([ DISTINCT ] имя_столбца )

Для использования функции AVG тип значения в столбце должен быть числовым.

Пример _____________________________ Значение ______________________

SELECT AVG (SALARY) Подсчет средней зарплаты всех служащих

FROM EMPLOYEE_PAY_TBL;

SELECT AVG (DISTINCT SALARY) Подсчет среднего значения для зарплат всех

FROM EMPLOYEE_PAY_TBL ; служащих без учета повторяющихся значений

Подсчитаем среднее для всех значений стоимости товаров из таблицы PRODUCTS_TBL.

Ввод:

SELECT AVG(COST)

FROM PRODUCTS_TBL;

Вывод:

AVG(COST)

-----------

13.5891667

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

В следующем примере в одном запросе используются две функции. Поскольку одним служащим платят ставку, а другим — почасово, можно подсчитать средние значения и для столбца PAY_RATE, и для столбца SALARY.

Ввод:

SELECT AVG(PAY_RATE), AVG(SALARY)

FROM PRODUCTSJTBL;

Вывод:

AVG(PAY_RATE) AVG(SALARY)

13.5833333 30000

Функция MAX

Функция MAX используется для подсчета максимума для значений заданной группы строк. Значения NULL при этом игнорируются. Можно использовать также ключевое слово DISTINCT, но поскольку повторно встречающиеся значения на значение максимума не влияют, это ключевое слово оказывается в данном случае бесполезным.

МАХ([ DISTINCT ] имя_столбца )

Пример ______________________________ Значение ____________________

SELECT MAX (SALARY) Нахождение максимальной зарплаты

FROM EMPLOYEE_PAY_TBL;

SELECT MAX (DISTINCT SALARY) Нахождение максимальной зарплаты без учета

FROM EMPLOYEE_PAY_TBL; повторяющихся значений

Подсчитаем максимум всех значений стоимости товаров из таблицы PRODUCT SJTBL.

Ввод:

SELECT MAX(COST)

FROM PRODUCTS_TBL;

Вывод:

MAX(COST)

------------------

59.99

Функция MIN

Функция MIN используется для подсчета минимума для значений заданной группы строк. Значения NULL при этом игнорируются. Можно использовать также ключевое слово DISTINCT, но поскольку повторно встречающиеся значения на значение минимума не влияют, это ключевое слово оказывается в данном случае бесполезным.

MIN([ DISTINCT ] имя_столбца )

Пример _________________________________ Значение _____________________

SELECT MIN (SALARY) Нахождение минимальной зарплаты

FROM EMPLOYEE_PAY_TBL;

SELECT MIN (DISTINCT SALARY) Нахождение минимальной зарплаты без уче-

FROM EMPLOYEE_PAY_TBL; та повторяющихся значений

Подсчитаем минимум всех значений стоимости товаров из таблицы PRODUCTSJTBL.

Ввод:

SELECT MIN(COST)

FROM PRODUCTS_TBL;

Вывод:

MIN(COST)

-----------

1.05

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

Наконец, рассмотрим пример комбинирования итоговых функций с арифметическими операциями.

Ввод:

SELECT COUNT(ORD_NUM), SUM(QTY),

SUM(QTY) / COUNT(ORD_NUM) AVG_QTY

FROM ORDERS_TBL;

Вывод:

COUNT(ORD_NUM) SUM(QTY) AVG_QTY

------------- ------- -------

7 160 22.85743

Здесь подсчитано число заказов, указана общая сумма стоимости всех заказов и с помощью деления второй величины на первую вычислена средняя стоимость заказа. Для представления последней создан псевдоним столбца — AVG_QTY.

Резюме

Итоговые функции несложно использовать и они могут оказаться весьма полезными. Вы теперь знаете, как подсчитать число значений в столбце, число строк в таблице, как найти максимальное или минимальное из всех значений в столбце. Помните о том, что при использовании итоговых функций значение NULL не учитывается — исключением является функция COUNT в формате COUNT (*).

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

Лекция 5.6

Наши рекомендации