Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Агрегатные функции в SQL




Фраза WHERE. Операторы сравнения.

Использование операторов сравнения

Синтаксис фразы WHERЕ. Для отбора нужных строк таблицы можно использовать операторы сравнения =, <> (не равно), <, <= (меньше или равно), >, >= (больше или равно), которые могут предваряться оператором NOT, создавая, например, отношения “не меньше” и “не больше”.

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

SELECT Продукт, Белки, Жиры, Углев, K, Ca, Na, B2, PP, C

FROM Продукты

WHERE Углев = 0;

 

и получить:

Продукт Белки Жиры Углев K Ca Na B2 PP C

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

Говядина 189. 124. 0. 3150 90 600 1.5 28. 0

Судак 190. 80. 0. 1870 270 0 1.1 10. 30

 

Возможность использования нескольких условий, соединенных логическими операторами AND, OR, AND NOT и OR NOT, позволяет осуществить более детальный отбор строк. Так, для получения получения перечня продуктов, практически не содержащих углеводов и натрия, можно сформировать запрос:

SELECT Продукт, Белки, Жиры, Углев, K, Ca, Na, B2, PP, C

FROM Продукты

WHERE Углев = 0 AND Na = 0;

 

результат которого имеет вид:

Продукт Белки Жиры Углев K Ca Na B2 PP C

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

Судак 190. 80. 0. 1870 270 0 1.1 10. 30

 

Наконец, если сформировать запрос:

SELECT Продукт, Белки, Жиры, Углев, K, Ca, Na, B2, PP, C

FROM Продукты

WHERE Углев = 0 AND Na = 0 AND Продукт <> 'Судак';

 

то будет получено сообщение “No rows exist or satisfy the specified clause” или аналогичное (в зависимости от вкусов разработчиков разных СУБД), информирующее об отсутствии строк, удовлетворяющих заданному(ым) условию(ям).

Агрегатные функции, группировка и условия раздела HAVING

 

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

19.2.1. Семантика агрегатных функций

 

Агрегатные функции (в стандарте SQL они называются функциями над множествами)141) определяются следующими синтаксическими правилами:

<set_function_specification>::=

COUNT(*)

| set_function_type ([DISTINCT | ALL ] value_expression)

| GROUPING (column_reference)

<set_function_type>::=

{ AVG | MAX | MIN | SUM | EVERY | ANY | SOME | COUNT }

 

Как видно из этих правил, в стандарте SQL:1999 определены пять стандартных агрегатных функций: COUNT – число строк или значений, MAX – максимальное значение, MIN – минимальное значение, SUM – суммарное значение и AVG – среднее значение, а также две «кванторные» функции EVERY и SOME (ANY). В последних двух случаях выражение должно иметь булевский тип. Обсуждение функции GROUPING мы отложим до следующей лекции.

 

Агрегатные функции предназначены для того, чтобы вычислять некоторое значение для заданного мультимножества строк. Таким мультимножеством строк может быть группа строк, если агрегатная функция применяется к сгруппированной таблице, или (в вырожденных случаях) вся таблица. Для всех агрегатных функций, кроме COUNT(*), фактический (т. е. требуемый семантикой) порядок вычислений состоит в следующем. На основании параметров агрегатной функции из заданного мультимножества строк производится список значений. Затем по этому списку значений производится вычисление функции. Если список оказался пустым, то значением функции COUNT для него является 0, значением функции SOME – false, значением функции ALL – true, а значением всех остальных функций – NULL.

 

Пусть T обозначает тип значений из этого списка (вернее, «наименьший общий» тип, см. раздел 17.2 «Скалярные выражения» лекции 17). Типы значений агрегатных функций определяются следующими правилами.

Результат вычисления функции COUNT – это точное число с точностью и шкалой, которые определяются в реализации.

Тип результата значений функций MAX и MIN совпадает с T. При вычислении функций SUM и AVG тип T не должен быть типом символьных строк.

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

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

Для функций EVERY и SOME T является булевским типом142).

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

Функция SOME принимает значение false в том и только в том случае, когда значение выражения-аргумента есть false для каждой строки из заданного набора строк, и true, когда значение выражения-аргумента есть true хотя бы для одной строки из заданного набора строк.

 

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

 

Если «арифметическая» (AVG, MAX, MIN, SUM, COUNT) агрегатная функция специфицирована с ключевым словом DISTINCT, то множество значений, на котором она вычисляется, строится из значений указанного выражения, вычисляемого для каждой строки заданной группы строк. Затем из этого мультимножества удаляются неопределенные значения, и в нем устраняются значения-дубликаты (т. е. образуется множество). После этого вычисляется указанная функция.

 

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




Поделиться с друзьями:


Дата добавления: 2015-05-10; Просмотров: 942; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.