Russian Belarusian English German Japanese Ukrainian

Оператор Select позволяет возвращать не только множество значений полей, но и некоторые совокупные (агрегированные) характеристики, подсчитанные по всем или по указанным записям таблицы. Одна из функций, возвращающих такие совокупные характеристики, count(<условие>) - количество записей в таблице, удовлетворяющих заданным условиям. Например, оператор:

SELECT count(*) FROM Pers

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

SELECT count(*) FROM Pers WHERE Dep='Uex 1'

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

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

SELECT count(DISTINCT Dep) FROM Pers

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

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

SELECT min(Year_b), max(Year_b), avg(Year_b) FROM Pers

вернет минимальное, максимальное и среднее значение года рождения, а оператор:

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

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

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

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

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

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

SELECT Fam, max(Yearjb) FROM Pers

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

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

SELECT Dep, count(*) FROM Pers GROUP BY Dep

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

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

SELECT Dep, count(*) FROM Pers GROUP BY Dep HAVING Dep <> 'Бухгалтерия'

то в таблице будут строки, относящиеся ко всем отделам, кроме бухгалтерии.

Впрочем, не все базы данных поддерживают синтаксис HAVING. При использовании базы данных dbP (Paradox) компонент Query не работает с HAVING. Для базы данных InterBase никаких проблем с HAVING не возникает.

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий


Поиск по сайту