Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Использование агрегирующих функций языка SQL




Использование выражений (expressions) в операторе SELECT

Многие СУБД предоставляют специальные возможности по обработке результатов запроса. Набор таких средств в разных СУБД различен, однако существуют некоторые стандартные возможности, такие как выражения. Например может потребоваться выполнить простые математические операции над данными, чтобы представить их в более удобном виде, или вставить дополнительный текст в результат запроса. SQL позволяет размещать среди выбранных столбцов скалярные выражения и константы, которые могут дополнять или замещать столбцы в предложениях SELECT. Рассмотрим пример.

4. Необходимо вывести комиссионные (comm) продавцов в виде процентов, а не десятичных чисел

SELECT snum, sname, city, comm * 100
FROM Salespeople

Результат:

snum sname city comm
1001 Peel London 12
1002 Serres San Jose 13
1003 Axelrod New York 10
1004 Motika London 11
1007 Rifkin Barcelona 15

В последнем столбце все полученные данные умножаются на 100, и выводятся в виде процентов.

 

Этот столбец не имеет названия, потому что не содержит измененные данные и поэтому именуется по усмотрению СУБД (например MySQL именует столбец comm * 100, в примерах М.Граббера столбец имеет имя 4, т.е его номер).

В таких случаях удобно использовать именование столбцов. Например можно назвать последний столбец percent. Для этого после имени столбца необходимо указать ключевое слово AS и затем имя столбца в результирующей страницы.

SELECT snum, sname, city, comm * 100 AS 'percent'
FROM Salespeople

Результат:

snum sname city percent
1001 Peel London 12
1002 Serres San Jose 13
1003 Axelrod New York 10
1004 Motika London 11
1007 Rifkin Barcelona 15

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

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

SELECT snum, sname, city, comm * 100 AS percent , '%' FROM Salespeople

Результат:

snum sname city percent %
1001 Peel London 12 %
1002 Serres San Jose 13 %
1003 Axelrod New York 10 %
1004 Motika London 11 %
1007 Rifkin Barcelona 15 %

Видно, что после вывода строки из БД, появился новый столбец, заполненный знаком процента (%).

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

В MySQL для этого используется функция CONCAT. Вот ее определение из справочника:

CONCAT(str1,str2,...)
Возвращает строку, являющуюся результатом конкатенации аргументов. Если хотя бы один из аргументов равен NULL, возвращается NULL. Может принимать более 2 аргументов. Числовой аргумент преобразуется в эквивалентную строковую форму.

Пример:

SELECT snum, sname, city , CONCAT(comm * 100, '%') AS 'persent' FROM salespeople

Результат:

snum sname city persent
1001 Peel London 12.000%
1002 Serres San Jose 13.000%
1003 Axelrod New York 10.000%
1004 Motika London 11.000%
1007 Rifkin Barcelona 15.000%

В данном запросе, функция CONCAT принимает 2 аргумента, это comm * 100 и знак процента ('%'). После этого с помощью AS мы именуем столбец.

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




Исключение избыточных данных

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

5. Необходимо вывести города (city), где есть продавцы

Запрос без исключений:

SELECT city FROM salespeople

Результат:

city
London
San Jose
New York
London
Barcelona

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

Запрос с исключением избыточных данных:

SELECT DISTINCT city FROM salespeople

Результат:

city
London
San Jose
New York
Barcelona

Повторяющиеся значение London исключены из результата, что и требовалось.

Сортировка результата по значениям столбцом

Оператор SELECT выводит данные в произвольной последовательности. Для сортировки результата по определенному столбцу, в SQL используется оператор ORDER BY (т.е. упорядочить по….). Этот оператор позволяет изменить порядок вывода данных. ORDER BY упорядочивает результат запроса в соответствии со значениями одного или нескольких столбцов, выбранных в предложении SELECT. При этом для каждого столбца можно задать сортировку по возрастанию – ascending (ASC) (этот параметр используется по умолчанию) или по убыванию – descending (DESC).

Отсортируем результат по столбцу sname. После оператора ORDER BY указываем по какому столбцу сортировать, затем необходимо указать способ сортировки

Пример – сортировка по возрастанию:

SELECT * FROM Salespeople ORDER BY sname ASC

Результат:

snum sname city comm
1003 Axelrod New York 0,1
1004 Motika London 0,11
1001 Peel London 0,12
1007 Rifkin Barcelona 0,15
1002 Serres San Jose 0,13

Пример – сортировка по убыванию:

SELECT * FROM Salespeople ORDER BY sname DESC

Результат:

snum sname city comm
1002 Serres San Jose 0,13
1007 Rifkin Barcelona 0,15
1001 Peel London 0,12
1004 Motika London 0,11
1003 Axelrod New York 0,1

 

Пример – сортировка по нескольким столбца:

SELECT snum, sname, city FROM Salespeople ORDER BY sname DESC, city DESC

Результат:

 

snum sname city
1002 Serres San Jose
1007 Rifkin Barcelona
1001 Peel London
1004 Motika London
1003 Axelrod New York

Несколько важных замечаний:

- столбец, по которому происходит сортировка, обязательно должен быть указан в SELECT (можно использовать *)

- оператор ORDER BY всегда пишется в конце запроса

 

Использование агрегирующих функций языка SQL

Стандарт ISO содержит определение следующих пяти агрегирующих функций:

COUNT – возвращает количество значений в указанном столбце;

SUM– возвращает сумму значений в указанном столбце;

AVG – возвращает усредненное значение в указанном столбце;

MIN – возвращает минимальное значение в указанном столбце;

МАХ – возвращает максимальное значение в указанном столбце.

Все эти функции оперируют со значениями в единственном столбце таблицы и возвращают единственное значение. Функции COUNT, MIN и МАХ применимы как к числовым, так и к нечисловым полям, тогда как функции SUM и AVG могут использоваться только в случае числовых полей. За исключением COUNT ( * ), при вычислении результатов любых функций сначала исключаются все пустые значения, после чего требуемая операция применяется только к оставшимся непустым значениям столбца.

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

Стандарт ISO допускает использование ключевого слова ALL с целью явного указания того, что исключение повторяющихся значений не требуется, хотя это ключевое слово подразумевается по умолчанию, если никакие иные определители не заданы. Ключевое слово DISTINCT не имеет смысла для функций MIN и МАХ. Однако его использование может оказывать влияние на результаты выполнения функций SUM и AVG, поэтому следует заранее обдумать, должно ли оно присутствовать в каждом конкретном случае. Кроме того, ключевое слово DISTINCT в каждом запросе может быть указано не более одного раза.

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

Использование функции COUNT(*).Определите, сколько сдаваемых в аренду объектов имеют ставку арендной платы более 350 фунтов стерлингов в месяц,

SELECT COUNT(*) AS count

FROM PropertyForRent

WHERE rent > 350;

Ограничение на подсчет только тех сдаваемых в аренду объектов, арендная плата которых составляет более 350 фунтов стерлингов в месяц, реализуется посредством использования конструкции WHERE. Общее количество сдаваемых в аренду объектов, отвечающих указанному условию, может быть определено с помощью агрегирующей функции COUNT. Результаты выполнения запроса представлены в табл. 23.

Таблица 23

count
 

Пример 14. Использование функции COUNT(DISTINCT).Определите, сколько различных сдаваемых в аренду объектов было осмотрено клиентами в мае 2001 года.

SELECT COUNT(DISTINCT propertyNo) AS count

FROM Viewing

WHERE date BETWEEN 'l-May-011 AND '31-May-Ol1;

И в этом случае ограничение результатов запроса анализом только тех сдаваемых в аренду объектов, которые были осмотрены в мае 2001 года, достигается посредством использования конструкции WHERE. Общее количество осмотренных объектов, удовлетворяющих указанному условию, может быть определено с помощью агрегирующей функции COUNT. Однако, поскольку один и тот же объект может быть осмотрен различными клиентами несколько раз, необходимо в определении функции указать ключевое слово DISTINCT – это позволит исключить из расчета повторяющиеся значения.

Использование функций COUNT и SUM.Определите общее количество менеджеров компании и вычислите сумму их годовой зарплаты.

SELECT COUNT(staffNo) AS count, SUM(salary) AS sum

FROM Staff

WHERE position = 'Manager';

      Ограничение на отбор сведений только о менеджерах компании достигается указанием в запросе соответствующей конструкции WHERE. Общее количество менеджеров и сумма ихгодовой заработной платы определяются путем применения к результирующей таблице запроса агрегирующих функций COUNT и SUM. Результаты выполнения запроса представлены в табл. 25.

Таблица 25

count sum
2 54000.00

 

Пример 16. Использование функций MIN, MAXnAVG.Вычислите значение минимальной, максимальной и средней заработной платы.

SELECT MIN(salary) AS min, MAX(salary) AS max, AVG(salary) AS avg

FROM Staff;

      В этом примере необходимо обработать сведения обо всем персонале компании, поэтому использовать конструкцию WHERE не требуется. Необходимые значения могут быть вычислены с помощью функций MIN, MAX и AVG, применяемых к столбцу salary таблицы Staff. Результаты выполнения запроса представлены в табл. 26.

Таблица 26.

Результат выполнения запроса

min max avg
9000.00 30000.00 17000.00

 

 










Последнее изменение этой страницы: 2018-05-10; просмотров: 159.

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