Russian Belarusian English German Japanese Ukrainian

Совокупные характеристики Select

CuBook05

Оператор 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

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