Контакти

Порахувати кількість записів у групах (створених GROUP BY). Обчислення в SQL Порахувати кількість id з певним значенням

Описується використання арифметичних операторів та побудова обчислюваних стовпців. Розглядаються підсумкові (агрегатні) функції COUNT, SUM, AVG, MAX, MIN. Надається приклад використання оператора GROUP BY для групування у запитах вибірки даних. Описується застосування пропозиції HAVING.

Побудова обчислюваних полів

У загальному випадку для створення обчислюваного (похідного) поляу списку SELECT слід вказати деякий вираз мови SQL. У цих виразах застосовуються арифметичні операції додавання, віднімання, множення та поділу, а також вбудовані функції мови SQL. Можна вказати ім'я будь-якого стовпця (поля) таблиці чи запиту, але використовувати ім'я стовпця лише тієї таблиці чи запиту, які вказані у списку пропозиції FROM відповідної інструкції. При побудові складних виразів можуть знадобитися дужки.

Стандарти SQL дозволяють явно задавати імена стовпців результуючої таблиці, для чого застосовується фраза AS .

SELECT Товар.Назва, Товар.Ціна, Угода.Кількість, Товар.Ціна*Угода.Кількість AS Вартість FROM Товар INNER JOIN Угода ON Товар.КодТовара=Угода.КодТовара Приклад 6.1. Розрахунок загальної вартості кожної угоди.

Приклад 6.2.Отримати список фірм із зазначенням прізвища та ініціалів клієнтів.

SELECT Фірма, Прізвище+""+ Left(Ім'я,1)+"."+Left(По батькові,1)+"."AS ПІБ FROM Клієнт Приклад 6.2. Отримання списку фірм із зазначенням прізвища та ініціалів клієнтів.

У запиті використано вбудовану функцію Left , що дозволяє вирізати в текстовій змінній один символ зліва в даному випадку.

Приклад 6.3.Отримати список товарів із зазначенням року та місяця продажу.

SELECT Товар.Назва, Year(Угода.Дата) AS Год, Month(Угода.Дата) AS Місяць FROM Товар INNER JOIN Угода ON Товар.КодТовара=Угода.КодТовара Приклад 6.3. Отримання списку товарів із зазначенням року та місяця продажу.

У запиті використані вбудовані функції Year та Month для виділення року та місяця з дати.

Використання підсумкових функцій

За допомогою підсумкових (агрегатних) функційв рамках SQL-запиту можна отримати ряд узагальнюючих статистичних відомостей про безліч відібраних значень вихідного набору.

Користувачеві доступні такі основні підсумкові функції:

  • Count (Вираз) - визначає кількість записів у вихідному наборі SQL-запиту;
  • Min/Max (Вираз) - визначають найменше та найбільше з безлічі значень у деякому полі запиту;
  • Avg (Вираз) - ця функція дозволяє розрахувати середнє значення безлічі значень, що зберігаються у певному полі відібраних запитом записів. Воно є арифметичним середнім значенням, тобто. сумою значень, поділеної з їхньої кількість.
  • Sum (Вираз) – обчислює суму безлічі значень, що містяться в певному полі відібраних запитом записів.

Найчастіше як вираз виступають імена стовпців. Вираз може обчислюватися і за значеннями кількох таблиць.

Всі ці функції оперують зі значеннями в єдиному стовпчику таблиці або з арифметичним виразом та повертають єдине значення. Функції COUNT , MIN та MAX застосовні як до числових, так і до нечислових полів, тоді як функції SUM та AVG можуть використовуватися лише у разі числових полів, за винятком COUNT(*) . При обчисленні результатів будь-яких функцій спочатку виключаються всі порожні значення, після чого необхідна операція застосовується тільки до конкретних значень стовпця, що залишилися. Варіант COUNT(*) - особливий випадок використання функції COUNT, його призначення полягає у підрахунку всіх рядків у результуючій таблиці, незалежно від того, містяться там порожні, дублюючі чи будь-які інші значення.

Якщо до застосування узагальнюючої функції необхідно виключити значення, що дублюються, слід перед ім'ям стовпця у визначенні функції помістити ключове слово DISTINCT. Воно не має сенсу для функцій MIN та MAX, проте його використання може вплинути на результати виконання функцій SUMі AVG , тому необхідно заздалегідь обміркувати, чи має бути присутнім у кожному конкретному випадку. Крім того, ключове слово DISTINCT може бути вказане у будь-якому запиті не більше одного разу.

Дуже важливо відзначити, що підсумкові функціїможуть використовуватись тільки у списку пропозиції SELECTта у складі пропозиції HAVING. В інших випадках це неприпустимо. Якщо список у пропозиції SELECT містить підсумкові функції, а в тексті запиту відсутня фраза GROUP BY , що забезпечує об'єднання даних у групи, то жоден із елементів списку пропозиції SELECT не може включати будь-яких посилань на поля, за винятком ситуації, коли поля виступають як аргументи підсумкових функцій.

Приклад 6.4.Визначити першу за алфавітом назву товару.

SELECT Min(Товарна назва) AS Min_Назва FROM Товар Приклад 6.4. Визначення першої за алфавітом назви товару.

Приклад 6.5.Визначити кількість угод.

SELECT Count(*) AS Кількість угод FROM Угода Приклад 6.5. Визначити кількість угод.

Приклад 6.6.Визначити сумарну кількість проданого товару.

SELECT Sum(Угода.Кількість) AS Кількість_товару FROM Угода Приклад 6.6. Визначення сумарної кількості проданого товару.

Приклад 6.7.Визначити середню ціну проданого товару.

SELECT Avg(Товар.Ціна) AS Avg_Ціна FROM Товар INNER JOIN Угода ON Товар.КодТовара=Угода.КодТовара; Приклад 6.7. Визначення середньої ціни проданого товару.

SELECT Sum(Товар.Ціна*Угода.Кількість) AS Вартість FROM Товар INNER JOIN Угода ON Товар.КодТовара=Угода.КодТовара Приклад 6.8. Підрахунок вартості проданих товарів.

Пропозиція GROUP BY

Часто у запитах потрібно формувати проміжні підсумки, що зазвичай відображається появою запиту фрази " кожного ... " . Для цього в операторі SELECT використовується пропозиція GROUP BY . Запит, у якому присутній GROUP BY , називається запитом, що групує, оскільки в ньому групуються дані, отримані в результаті виконання операції SELECT , після чого для кожної окремої групи створюється єдиний сумарний рядок. Стандарт SQL вимагає, щоб пропозиція SELECT та фраза GROUP BY були тісно пов'язані між собою. За наявності в операторі SELECT фрази GROUP BY кожен елемент списку у реченні SELECT повинен мати єдине значення для всієї групи. Більше того, пропозиція SELECT може включати лише такі типи елементів: імена полів, підсумкові функції, константи та вирази, що включають комбінації перерахованих вище елементів.

Всі імена полів, наведені в списку пропозиції SELECT, повинні бути присутніми і у фразі GROUP BY - за винятком випадків, коли ім'я стовпця використовується в підсумкової функції. Зворотне правило не є справедливим – у фразі GROUP BY можуть бути імена стовпців, які відсутні у списку пропозиції SELECT.

Якщо спільно з GROUP BY використовується пропозиція WHERE , вона обробляється першим, а групуванню піддаються ті рядки, які задовольняють умові пошуку.

Стандартом SQL визначено, що з проведенні групування всі відсутні значення розглядаються як рівні. Якщо два рядки таблиці в тому самому групованому стовпці містять значення NULL і ідентичні значення у всіх інших непустих групованих стовпцях, вони поміщаються в одну і ту ж групу.

Приклад 6.9.Обчислити середній обсяг покупок, здійснених кожним покупцем.

SELECT Клієнт.Прізвище, Avg(Угода.Кількість) AS Середня_кількість FROM Клієнт INNER JOIN Угода ON Клієнт.КодКлієнта=Угода.КодКлієнта GROUP BY Клієнт.Прізвище Приклад 6.9. Обчислення середнього обсягу покупок, здійснених кожним покупцем.

Фраза "кожним покупцем" знайшла своє відображення у SQL-запиті у вигляді пропозиції GROUP BY Клієнт.Прізвище.

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

SELECT Товар.Назва, Sum(Товар.Ціна*Угода.Кількість) AS Вартість FROM Товар INNER JOIN Угода ON Товар.КодТовара=Угода.КодТовара GROUP BY Товар.Назва Приклад 6.10. Визначення, яку суму було продано товар кожного найменування.

SELECT Клієнт.Фірма, Count(Угода.КодУгоди) AS Кількість угод FROM Клієнт INNER JOIN Угода ON Клієнт.КодКлієнта=Угода.КодКлієнта GROUP BY Клієнт.Фірма Приклад 6.11. Підрахунок кількості угод, здійснених кожною фірмою.

SELECT Клієнт.Фірма, Sum(Угода.Кількість) AS Загальна_Кількість, Sum(Товар.Ціна*Угода.Кількість) AS Вартість FROM Товар INNER JOIN (Клієнт INNER JOIN Угода ON Клієнт.КодКлієнта=Угода.КодКлієнта) .КодТовара GROUP BY Клієнт.Фірма Приклад 6.12. Підрахунок загальної кількості купленого кожної фірми товару та її вартості.

Приклад 6.13.Визначити сумарну вартість кожного товару за кожний місяць.

SELECT Товар.Назва, Month(Угода.Дата) AS Місяць, Sum(Товар.Ціна*Угода.Кількість) AS Вартість FROM Товар INNER JOIN Угода ON Товар.КодТовара=Угода.КодТовара GROUP BY Товар.Назва, Month(Угода.Дата) ) Приклад 6.13. Визначення сумарної вартості кожного товару за кожний місяць.

Приклад 6.14.Визначити сумарну вартість кожного товару першого ґатунку за кожен місяць.

SELECT Товар.Назва, Month(Угода.Дата) AS Місяць, Sum(Товар.Ціна*Угода.Кількість) AS Вартість FROM Товар INNER JOIN Угода ON Товар.КодТовара=Угода.КодТовара WHERE Товар.Сорт="Перший" GROUP BY Товар. .Назва, Month(Угода.Дата) Приклад 6.14. Визначення сумарної вартості кожного товару першого ґатунку за кожен місяць.

Пропозиція HAVING

За допомогою HAVING відображаються всі попередньо згруповані за допомогою GROUP BY блоки даних, що задовольняють заданим HAVING умовам. Це додаткова можливість"профільтрувати" вихідний набір.

Умови HAVING відрізняються від умов WHERE :

  • HAVING виключає із результуючого набору даних групи з результатами агрегованих значень;
  • WHERE виключає з розрахунку агрегатних значень щодо угруповання запису, що не задовольняють умові;
  • за умови пошуку WHERE не можна задавати агрегатні функції.

Приклад 6.15.Визначити фірми, у яких загальна кількість угод перевищила три.

SELECT Клієнт.Фірма, Count(Угода.Кількість) AS Кількість_угод FROM Клієнт INNER JOIN Угода ON Клієнт.КодКлієнта=Угода.КодКлієнта GROUP BY Клієнт.Фірма HAVING Count(Угода.Кількість)>3 Приклад 6.15. Визначення фірм, у яких загальна кількість угод перевищила три.

Приклад 6.16.Вивести список товарів, проданих у сумі понад 10000 крб.

SELECT Товар.Назва, Sum(Товар.Ціна*Угода.Кількість) AS Вартість FROM Товар INNER JOIN Угода ON Товар.КодТовара=Угода.КодТовара GROUP BY Товар.Назва HAVING Sum(Товар.Ціна*Угода.Кількість)>1000 Приклад 6.16. Висновок списку товарів, проданих у сумі понад 10000 крб.

Приклад 6.17.Вивести список товарів, проданих у сумі понад 10000 без зазначення суми.

SELECT Товар.Назва FROM Товар INNER JOIN Угода ON Товар.КодТовара=Угода.КодТовара GROUP BY Товар.Назва HAVING Sum(Товар.Ціна*Угода.Кількість)>10000 Приклад 6.17. Виведення списку товарів, проданих у сумі понад 10000 без зазначення суми.

Починаючи від версії 4.0 у СУБД MySQL з'явилася досить зручна можливість підрахунку кількості всіх відповідних під запит записів, коли кількість записів обмежується LIMIT'ом. При роботі з пошуком у БД, а також при вибірках з таблиць великою кількістюзаписів такий функціонал просто необхідний.

Синтаксису. У запиті SELECT перед списком шпальт необхідно вказати опцію SQL_CALC_FOUND_ROWS. Ось початок опису синтаксису конструкції SELECT.

SELECT




select_expr, … …

Таким чином, виконуючи запит SELECT SQL_CALC_FOUND_ROWS СУБД підрахує повну кількість рядків, які підходять під умову запиту, і зберегти це число в пам'яті. Природно, має сенс запит SELECT SQL_CALC_FOUND_ROWS лише за умови використання обмеження (LIMIT). Відразу після виконання запиту на вибірку для отримання кількості записів потрібно виконати ще один SELECT-запит: SELECT FOUND_ROWS();. В результаті MySQL поверне один рядок з одним полем, в якому зберігатиметься число рядків.

Приклад самих запитів:

> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE number > 100 LIMIT 10;
> SELECT FOUND_ROWS();

Перший запит поверне (виведе) 10 рядків таблиці tbl_name, для яких виконується умова number > 100. Другий виклик команди SELECT поверне кількість рядків, які повернула б перша команда SELECT, якби вона була написана без виразу LIMIT. Хоча при використанні команди SELECT SQL_CALC_FOUND_ROWS, MySQL повинен перерахувати всі рядки в наборі результатів, цей спосіб все одно швидше, ніж без LIMIT, оскільки не потрібно надсилати результат клієнту.

Приклад запитів з PHP:

$result = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM table1 LIMIT 0, 10", $link);
while ($row = mysql_fetch_assoc($result))
{
var_dump($row);
}

$result = mysql_query("SELECT FOUND_ROWS()", $link);
$num_rows = mysql_result($result, 0);
echo "$num_rows Rows\n";

В результаті виконання коду за умови, що $link вказує на відкрите з'єднання з СУБД, PHP виведе 10 рядків з таблиці table1 , а потім ціле число рядків, відповідних запиту (без урахування LIMIT).

У запитах з UNION SQL_CALC_FOUND_ROWS може поводитися подвійно через те, що LIMIT може з'являтися у кількох місцях. Рахунок рядків може вестися для індивідуальних SELECT-запитів, або для всього запиту після об'єднання.

Ціль SQL_CALC_FOUND_ROWS для UNION полягає в тому, що він повинен повернути кількість рядків, які будуть повернуті без глобального LIMIT. Умови застосування SQL_CALC_FOUND_ROWS з UNION наведені нижче:

  • Ключове слово SQL_CALC_FOUND_ROWS має вказуватися в першому операторі SELECT.
  • Значення FOUND_ROWS() буде точним лише за умови застосування UNION ALL. Якщо вказано UNION без ALL, відбувається виключення дублікатів і значення FOUND_ROWS() буде лише приблизним.
  • Якщо в UNION немає LIMIT, то SQL_CALC_FOUND_ROWS ігнорується і повертається кількість рядків у тимчасовій таблиці, яка створюється для виконання UNION.

Щоб визначити кількість записів у таблиці MySQLпотрібно скористатися спеціальною функцією COUNT().

Функція COUNT() повертає кількість записів у таблиці, які відповідають заданому критерію.

Функція COUNT(expr) завжди вважає ті рядки, у яких результатом виразу expr є NOT NULL .

Винятком із цього правила є використання функції COUNT() із зірочкою як аргумент - COUNT(*) . У цьому випадку вважаються всі рядки, незалежно від того, NULL вони або NOT NULL .

Наприклад, функція COUNT(*) повертає загальну кількість записів у таблиці:

SELECT COUNT(*) FROM table_name

Як порахувати кількість записів та вивести на екран

Приклад PHP+MySQL-коду для підрахунку та виведення загальної кількості рядків:

$res = mysql_query("SELECT COUNT(*) FROM table_name") $row = mysql_fetch_row($res); $ total = $ row; // всього записів echo $ total; ?>

Цей приклад ілюструє найпростіший варіант використання функції COUNT(). Але за допомогою цієї функції можна виконувати й інші завдання.

Вказавши певний стовпецьтаблиці як параметр, функція COUNT(column_name) повертає кількість записів цього стовпця, які містять значення NULL . Записи із значеннями NULL ігноруються.

SELECT COUNT(column_name) FROM table_name

Використовувати функцію mysql_num_rows() не можна, тому що для того, щоб дізнатися загальну кількість записів, потрібно виконати запит SELECT * FROM db , тобто отримати всі записи, а це небажано, тому краще використовувати функцію count .

$result = mysql_query("SELECT COUNT(*) як rec FROM db");

Використання функції COUNT() на прикладі

Ось ще один приклад використання функції COUNT(). Допустимо, є таблиця ice_cream з каталогом морозива, в якій знаходяться ідентифікатори категорій та назви морозива.

SQL - Урок 8. Угруповання записів та функція COUNT()

Згадаймо, які повідомлення і в яких темах у нас є. Для цього можна скористатися звичним запитом:

А якщо нам треба лише дізнатися скільки повідомлень на форумі є. Для цього можна скористатися вбудованою функцією COUNT(). Ця функція підраховує кількість рядків. Причому, якщо як аргумент цієї функції виступає *, то підраховуються всі рядки таблиці. А якщо в якості аргументу вказується ім'я стовпця, то підраховуються ті рядки, які мають значення у зазначеному стовпці.

У прикладі обидва аргументи дадуть однаковий результат, т.к. Усі стовпці таблиці мають тип NOT NULL. Давайте напишемо запит, використовуючи як аргумент стовпець id_topic:

SELECT COUNT(id_topic) FROM posts;

Отже, у наших темах є 4 повідомлення. Але якщо ми хочемо дізнатися скільки повідомлень є в кожній темі. Для цього нам знадобиться згрупувати наші повідомлення за темами та обчислити для кожної групи кількість повідомлень. Для угруповання в SQL використовується оператор GROUP BY. Наш запит тепер виглядатиме так:

SELECT id_topic, COUNT(id_topic) FROM posts GROUP BY id_topic;

Оператор GROUP BYвказує СУБД згрупувати дані по стовпцю id_topic (тобто кожна тема - окрема група) і кожної групи підрахувати кількість рядків:

Ну ось, у темі з id=1 у нас 3 повідомлення, а з id=4 – одне. До речі, якби в полі id_topic були можливі відсутності значень, такі рядки були б об'єднані в окрему групу зі значенням NULL.

Припустимо, що нас цікавлять лише ті групи, які мають більше двох повідомлень. У звичайному запиті ми вказали б умову за допомогою оператора WHERE, але цей оператор вміє працювати тільки з рядками, а для груп ті ж функції виконує оператор HAVING:

SELECT id_topic, COUNT(id_topic) FROM posts GROUP BY id_topic HAVING COUNT(id_topic) > 2;

В результаті маємо:

В уроці 4 ми розглядали, які умови можна задавати оператором WHERE, ті самі умови можна задавати і оператором HAVING, тільки треба запам'ятати, що WHEREфільтрує рядки, а HAVING- Групи.

Отже, сьогодні ми дізналися, як створювати групи та як підрахувати кількість рядків у таблиці та групах. Взагалі разом із оператором GROUP BYможна використовувати інші вбудовані функції, але їх ми вивчатимемо пізніше.

Вчимося підбивати підсумки. Ні, це ще результати вивчення SQL, а підсумки значень стовпців таблиць бази даних. Агрегатні функції SQLдіють щодо значень шпальти з метою отримання єдиного результуючого значення. Найчастіше застосовуються агрегатні функції SQL SUM, MIN, MAX, AVG та COUNT. Слід розрізняти два випадки застосування агрегатних функцій. Перший: агрегатні функції використовуються власними силами і повертають одне результуюче значення. Другий: агрегатні функції використовуються з оператором SQL GROUP BY, тобто з групуванням по полях (стовпцям) для отримання результуючих значень у кожній групі. Розглянемо спочатку випадки використання агрегатних функцій без угруповання.

Функція SQL SUM

Функція SQL SUM повертає суму значень шпальти таблиці бази даних. Вона може застосовуватися тільки до стовпців, значення яких числа. Запити SQLдля отримання результуючої суми починаються так:

SELECT SUM (ІМ'Я_СТОЛБЦЯ) ...

Після цього виразу слідує FROM (ІМ'Я_ТАБЛИЦІ), а далі за допомогою конструкції WHERE може бути задана умова. Крім того, перед іменем стовпця може бути вказано DISTINCT, і це означає, що враховуватимуться лише унікальні значення. За умовчанням враховуються всі значення (для цього можна особливо вказати не DISTINCT, а ALL, але слово ALL не є обов'язковим).

приклад 1.Є база даних фірми з даними про її підрозділи та співробітників. Таблиця Staff також має стовпець з даними про заробітну плату співробітників. Вибірка з таблиці має такий вигляд (для збільшення картинки клацнути по ній лівою кнопкою миші):

Для отримання суми розмірів усіх заробітних плат використовуємо наступний запит:

SELECT SUM (Salary) FROM Staff

Цей запит поверне значення 287664,63.

А зараз . У вправах вже починаємо ускладнювати завдання, наближаючи їх до тих, що зустрічаються практично.

Функція SQL MIN

Функція SQL MIN також діє щодо стовпців, значеннями яких є числа та повертає мінімальне серед усіх значень стовпця. Ця функція має синтаксис, аналогічний синтаксису функції SUM.

приклад 3.База даних та таблиця - ті ж, що й у прикладі 1.

Потрібно дізнатися мінімальну заробітну платуспівробітників відділу з номером 42. Для цього пишемо наступний запит:

Запит поверне значення 10 505,90.

І знову вправа для самостійного рішення . У цьому та деяких інших вправах знадобиться вже не лише таблиця Staff, а й таблиця Org, що містить дані про підрозділи фірми:


приклад 4.До таблиці Staff додається таблиця Org, що містить дані підрозділах фірми. Вивести мінімальну кількість років, опрацьованих одним співробітником у відділі, розташованому у Бостоні.

Функція SQL MAX

Аналогічно працює та має аналогічний синтаксис функція SQL MAX, яка застосовується, коли потрібно визначити максимальне значення серед усіх значень стовпця.

Приклад 5.

Потрібно дізнатися про максимальну заробітну плату співробітників відділу з номером 42. Для цього пишемо наступний запит:

Запит поверне значення 18352,80

Прийшов час вправи для самостійного вирішення.

Приклад 6.Знову працюємо з двома таблицями – Staff та Org. Вивести назву відділу та максимальне значення комісійних, які отримують один співробітник у відділі, що відноситься до групи відділів (Division) Eastern. Використати JOIN (з'єднання таблиць) .

Функція SQL AVG

Зазначене щодо синтаксису для попередніх описаних функцій є правильним і щодо функції SQL AVG. Ця функція повертає середнє серед усіх значень стовпця.

Приклад 7.База даних та таблиця - ті ж, що й у попередніх прикладах.

Нехай потрібно дізнатися середній стаж працівників відділу з номером 42. Для цього пишемо наступний запит:

Результатом буде значення 6,33

Приклад 8.Працюємо з однією таблицею – Staff. Вивести середню зарплату працівників зі стажем від 4 до 6 років.

Функція SQL COUNT

Функція SQL COUNT повертає кількість записів таблиці бази даних. Якщо в запиті вказати SELECT COUNT(ІМ'Я_СТОЛБЦЯ) ..., то результатом буде кількість записів без урахування записів, у яких значенням стовпця є NULL (невизначене). Якщо використовувати як аргумент зірочку і почати запит SELECT COUNT(*) ..., то результатом буде кількість всіх записів (рядків) таблиці.

Приклад 9.База даних та таблиця - ті ж, що й у попередніх прикладах.

Потрібно дізнатися про кількість всіх співробітників, які отримують комісійні. Число співробітників, у яких значення стовпця Comm – не NULL, поверне наступний запит:

SELECT COUNT (Comm) FROM Staff

Результатом буде 11.

Приклад 10База даних та таблиця - ті ж, що й у попередніх прикладах.

Якщо потрібно дізнатися загальну кількість записів у таблиці, то застосовуємо запит із зірочкою як аргумент функції COUNT:

SELECT COUNT (*) FROM Staff

Результатом буде 17.

В наступному вправі для самостійного вирішенняпотрібно використовувати підзапит.

Приклад 11.Працюємо з однією таблицею – Staff. Вивести кількість співробітників у відділі планування (Plains).

Агрегатні функції разом із SQL GROUP BY (угрупуванням)

Тепер розглянемо застосування агрегатних функцій разом із оператором SQL GROUP BY. Оператор SQL GROUP BY служить для групування результуючих значень стовпчиків таблиці бази даних. На сайті є урок, присвячений окремо цьому оператору .

приклад 12.Існує база даних порталу оголошень. Вона містить таблицю Ads, яка містить дані про оголошення, подані за тиждень. Стовпець Category містить дані про великі категорії оголошень (наприклад, Нерухомість), а стовпець Parts - про дрібніші частини, що входять до категорії (наприклад, частини Квартири та Дачі є частинами категорії Нерухомість). Стовпець Units містить дані про кількість поданих оголошень, а стовпець Money - про грошові суми, отримані за подачу оголошень.

CategoryPartUnitsMoney
ТранспортАвтомашини110 17600
НерухомістьКвартири89 18690
НерухомістьДачі57 11970
ТранспортМотоцикли131 20960
БудматеріалиДошки68 7140
ЕлектротехнікаТелевізори127 8255
ЕлектротехнікаХолодильники137 8905
БудматеріалиРегіпс112 11760
ДозвілляКниги96 6240
НерухомістьБудинки47 9870
ДозвілляМузика117 7605
ДозвілляІгри41 2665

Використовуючи оператор SQL GROUP BY, знайти суми грошей, отриманих за подачу оголошень в кожній категорії. Пишемо наступний запит:

SELECT Category, SUM (Money) AS Money FROM Ads GROUP BY Category

приклад 13.База даних та таблиця - та сама, що у попередньому прикладі.

Використовуючи оператор SQL GROUP BY, з'ясувати, в якій частині кожної категорії було подано найбільшу кількість оголошень. Пишемо наступний запит:

SELECT Category, Part, MAX (Units) AS Maximum FROM Ads GROUP BY Category

Результатом буде наступна таблиця:

Підсумкові та індивідуальні значення в одній таблиці можна отримати об'єднанням результатів запитів за допомогою оператора UNION .

Реляційні базиданих та мова SQL



Сподобалася стаття? Поділіться їй