Оператор SELECT. Выбор данных из таблицы. Псевдонимы столбцов. Удаление повторяющихся строк, страница 4

FROM title

ORDER BY sales;

В SQL применяется функция COALESCE. чтобы исключить в запросах появление значений NULL. Результатом является значение первого выражения из списка, которое не является NULL.

COALESCE (state, “Нет данных”)

В Access функция не поддерживается, вместо нее применяется функция Switch.

Пример. Запрос NO-NULL

SELECT pub_name,

city,

Switch (state IS NOT NULL, state, state IS NULL, "Нет данных") AS "Штат"

FROM Publisher;

Наоборот для подстановки значения NULL может применяться в SQL функция NULLIF, которая также не поддерживается Access.

Пример. Запрос 0-to-NULL

SELECT title_name,

contract,

IIF(contract=0, Null,IIF(contract IS Null,0,contract))

FROM Title;

Группировка данных

Конструкция GROUP BY группирует строки запроса. Конструкция HAVING фильтрует группы строк. Каждой группе можно сопоставить резюмирующее значение, вычисленное посредством агрегатной функции: MIN, MAX, SUM, AVG, COUNT, CONT(*). Функция COUNT вычисляет количество значений заданного выражения (количество экземпляров кортежей), не равных NULL. CONT(*) – число строк (кортежей).

Все функции, за исключением COUNT, игнорируют значение NULL (если при вычислении COUNT все значения NULL – результат 0).

Коммерческие СУБД предоставляют и иные функции, например для вычисления статистических показателей.

Любое предложение команды SELECT должно содержать либо неагрегатные выражения либо агрегатное выражение.

Пример. Запрос Sales-MIN-MAX

SELECT MIN(sales) AS "MIN", MAX(sales) AS "MAX"

FROM Title;

Допускается применение агрегатных выражений для тех столбцов, по которым проводится группировка.

Пример. Запрос Sales-Type

SELECT type,

SUM(sales) AS "Продажи"

FROM Title

GROUP BY type;

Агрегатное выражение не может присутствовать в конструкции WHERE. Однако его можно применить в подзапросах.

Пример. Запрос INFO-MAX

SELECT title_name,

price,

sales

FROM title

WHERE sales = (SELECT MAX(sales) FROM Title);

Агрегатные функции не могут быть аргументом другой агрегатной функции.

Примечание. В Oracle агрегатные выражения могут вкладываться друг в друга, но только в запросах с группировкой.

SELECT AVG(MAX(sales))

FROM title

GROUP BY type;

Задание.

1) Найти мин. цену издания

2) Найти мин. количество страниц в издании

3) Найти издание с мин. ценой

4) Найти издание минимального объема

5) Найти макс. длину фамилии автора (au_lname)

6) Найти разность между мин. и макс. ценой

7) Найти разность между мин. и макс. продажей

8) Найти выручку от издания с максимальным объемом продаж

9) Рассчитать объем продаж за некоторый интервал

10) Вычислить суммарную выручку

11) Рассчитать средние продажи по категориям

12) Найти издания, продажи которых выше среднего

Функция COUNT(выражение) определяет число строк, для которых значение выражение не равно NULL.  Функция COUNT(*) – число строк, включая дубликаты и значения NULL.

Пример. Количество авторов, получивших предоплату. (Запрос COUNT_Prepayment)

SELECT

COUNT (advance) AS "Кол-во предоплат"

FROM Roaylties;

В SQL допускается предложение DISTINCT в агрегатных функциях, COUNT (DISTINCT price). Access не поддерживает такой возможности.

Пример. Количество вариантов гонорара. (Запрос Kind_Royalties)

SELECT

COUNT(roaylty_rate) AS "Варианты гонорара"

FROM (SELECT DISTINCT roaylty_rate FROM Roaylties);

При группировании данных общий вид оператора SELECT:

SELECT столбцы

FROM таблица

WHERE условие

GROUP BY столбцы групп

HAVING условие-фильтр

ORDER BY столбцы сортировки

Группирующими могут быть столбцы таблицы или вычислимые столбцы. Любой неагрегатный столбец в предложении SELECT должен содержаться в предложении GROUP BY. Значение NULL образует отдельную группу. Применять псевдонимы в предложении GROUP BY нельзя.