
Агрегирование данных. Sql-функции
В SQL існує ряд стандартних функцій (SQL-функцій). Крім спеціального випадку COUNT(*) кожна з цих функцій оперує сукупністю значень стовпця деякої таблиці і створює єдине значення, яке визначаються так: COUNT - кількість значень в стовпці, SUM - сума значень в стовпці, AVG - среднє значення в стовпці, MAX - найбільше значення в стовпці, MIN - найменше значення в стовпці. Для функцій SUM и AVG стовпець повинен містити числові значення. Зауважимо, що тут стовпець - це стовпець віртуальної таблиці, в якій можуть міститися дані не тільки з стовпця базової таблиці, але й дані, отртимані шляхом функціонального перетворення й(або) зв’язування символами арифметичних операцій значень з одного або декількох стовпців. Із SQL-функцій можно складати будь-які вирази. Перед аргументами всіх функций, кроме COUNT(*), може ставити ключове слово DISTINCT (різний), яке вказує, що значения, які дублюються, повинні бути виключені перед тем, як буде застосовуватися функція. Спеціальна функція COUNT(*) служить для підрахунку всіх без виключення рядків в таблиці (включаючи дублікати).
Записи набору даних можуть бути згруповані за деякою ознакою. Групу утворюють записи з однаковими значеннями в полях, перелічених в списку операнда GROUP BY.
Групування записів автоматично виключає повтор значень в полях, заданих для групування, так як записи із співпадаючими значеннями цих полів об’єднуються в одну групу.
Приклад запиту з групуванням записів:
select data_nar, count (data_nar)
from stat
where data_nar between ‘01.01.1960’ and ‘15.01.1980’
group by data_nar
Для кожної дати із вказаного періоду виводиться кількість записів, де вона зустрічається. Якщо не виконати групування, то в набір даних попадуть всі записи, а при групуванні всі записи отриманого набору даних унікальні. Функція COUNT виводить для кожної групи (сформованої по полю дати) кількість записів у групі.
Виконавши запит
select cod, sum (suma)
from obsag
group by cod
можна вивести загальну суму операцій, виконаних кожним рекламним агентом.
Максимальну суму операції кожного рекламного агента можна вибрати з допомогою запиту:
select cod, max (suma)
from obsag
group by cod
Сортування записів
Сортування - це впорядкування записів за зростанням або спаданням значень полів. Список полів, за якими здійснюється сортування, вказується в операнді ORDER BY. Порядок полів в цьому операнді визначає порядок сортування: спочатку записи впорядковуються за значенням поля, вказаного в цьому списку першим, потім записи, які мають однакові записи першого поля, впорядковуються за значенням другого поля і т.д.
Поля в списку позначаються іменами або номерами, відповідними до номерів полів у списку після слова SELECT. По замовчуванню сортування здійснюється в порядку зростання значень полів. Для протилежного напряму сортування необхідно вказати після імені поля описувач DESC.
Приклад запиту на сортування записів:
select *
from stat
order by prizv
Тут сортування записів задано за полем prizv.
Приклад запиту на сортування за двома полями:
select prizv, stag
from stat
order by prizv, stag desc
або
select prizv, stag
from stat
order by 1, 2 desc
У створений набір даних входять поля prizv, stag всіх записів. Записи посортовані за полями prizv, stag, при цьому значення поля stag впорядковано в порядку спадання.
Ще одна перевага мови SQL – це простота об’єднання даних, які містяться в декількох таблицях. Для цього після слова FROM перераховуються імена таблиць, із записів яких формується набір даних:
SELECT *
FROM <ім’я таблиці_1>, < ім’я таблиці_2>
або
SELECT <ім’я таблиці_1.*>, <ім’я таблиці_2.*>
FROM <ім’я таблиці_1>, <ім’я таблиці_2>
Результатний набір даних складають всі поля і всі записи з двох таблиць. Спочатку розміщаються поля першої таблиці, далі – поля другої таблиці.
Відбір конкретних полів із двох таблиць виконується оператором:
SELECT <ім’я таблиці_1.ім’я поля>, <ім’я таблиці_2.ім’я поля>
FROM <ім’я таблиці_1>, <ім’я таблиці_2>
Якщо імена полів унікальні (не повторюються), то у запиті імена таблиць у визначенні полів не вказуються:
SELECT <ім’я поля>, <ім’я поля>
FROM <ім’я таблиці_1>, <ім’я таблиці_2>
Зв’язування таблиць
У набір даних можна включати поля з різних таблиць. Таке включення називається зв’язуванням таблиць. Зв’язування таблиць може бути внутрішнім і зовнішнім.
Внутрішнє зв’язування таблиць - це найпростіший випадок, коли після слова SELECT перелічуються поля різних таблиць.
Таблиці stat і obsag містять основні і додаткові дані про рекламних агентів. Таблиці зв’язані відношенням „один до одного”, тобто кожному запису першої таблиці відповідає один запис іншої таблиці. Результатний набір даних є об’єднанням полів двох таблиць таким чином, що ніби додаткові дані з’єднуються з основними. У таблицях можуть бути вибрані не всі поля, але це не міняє принципу з’єднання.
При використанні внутрішнього з’єднання таблиць з відношенням „один до одного” результат виконання запиту може містити надлишкову інформацію. Для того, щоб в результатному наборі даних отримати повну інформацію про здійснені операції, необхідно скористатися запитом з внутрішнім з’єднанням таблиць, зв’язаних відношенням „один до багатьох”. Наприклад,
select *
from stat, obsag
where stat.cod = obsag.cod
У результаті запиту виведуться всі поля і записи таблиці obsag і всі поля таблиці stat.
select stat.cod, stat.prizv, obsag.suma
from stat, obsag
where stat.cod = obsag.cod
У результаті запиту виведуться всі записи полів cod i prizv таблиці stat, а також поля suma таблиці obsag.
select *
from stat, obsag
where stat.cod = obsag.cod
order by stat.cod
У результаті запиту виведуться всі поля і записи таблиці obsag і всі поля таблиці stat, причому записи будуть посортовані по полю cod.