550_____________________________________________Глава 10

подсчитает полное количество записей в таблице Pers. А оператор

SELECT count(*) as Uexl FROM Pers WHERE Оер='Цех Г

выдаст число записей сотрудников цеха 1.

Оператор, использующий ключевое слово DISTINCT (уникальный), выдаст
число неповторяющихся значений в указанном поле. Например, оператор

SELECT count(DISTINCT Dep) FROM Pers

вернет число различных подразделений, упомянутых в поле Dep таблицы Pers.

Функции пип(<поле>), тах(<поле>), avg(<none>), sum(<none>) возвращают
соответственно минимальное, максимальное, среднее и суммарное значения ука-
занного поля. Например, оператор

SELECT min(Year_b), max(Year_b), avg(Year_b) FROM Pers
вернет минимальное, максимальное и среднее значение года рождения, а оператор

SELECT min(1999-Year_b), max(1999-Year_b), avg(1999-Year_b)
FROM Pers WHERE Dep='Бухгалтерия'

выдаст вам аналогичные данные, но относящиеся к возрасту сотрудников бухга::

терии.

В операторе Select вы можете указывать не только суммарные характеристи-
ки, но и любые выражения от них. Например, оператор

SELECT 1999-(min(Year_b)+max(Year_b))/2 FROM Pers WHERE
Dep='Бухгалтерия'

выдаст моду (среднее между максимальным и минимальным значениями) возраста
сотрудников бухгалтерии. Здесь надо обратить внимание на то, что оператор вер-
нет округленное до целого значение моды, поскольку в выражении использованы
только целые числа и поэтому осуществляется целочисленное деление. Если же BI,:

в том же операторе замените делитель «2» на «2.», т.е. укажете его как действитг
льное значение, то и результат будет представлен действительным числом.

При использовании суммарных характеристик надо учитывать, что в списк'
возвращаемых значений после ключевого слова SELECT могут фигурировать ил;

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

SELECT Fam, max(Year_b) FROM Pers

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

Смешение в одном операторе полей и совокупных характеристик возможно,
если использовать группировку записей, задаваемую ключевыми словами GROUP
BY. После этих ключевых слов перечисляются все поля, входящие в список
SELECT. В этом случае смысл совокупных характеристик изменяется: они прово-
дят вычисления не по всем записям таблицы, а по тем, которые соответствуют оди-
наковым значениям указанных полей. Например, оператор

SELECT Dep Отдел, count(*) Всего_сотрудников FROM Pers GROUP BY Dep

вернет таблицу, в которой будет 2 столбца: столбец Отдел с названиями отделов, и
столбец Всего_сотрудников, в котором будет отображено число сотрудников в каж-
дом отделе: