Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MySql.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
467.46 Кб
Скачать

Обчислення середнього значення: функція avg

  • Підрахуйте середню вартість всіх замовлень у таблиці orders бази даних book_shop. Інструкція на запит:

mysql> select avg(Amount) from orders;

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

  • Підрахуйте середню вартість всіх замовлень по кожному клієнту окремо.

Інструкція на запит:

mysql> select customerlD, avg(Amount)

-> from orders

-> group by customerlD;

Результат запиту:

customerlD

avg(Amount)

1

144.000000

2

42.000000

3

141.000000

Якщо у результатах запиту повинні бути відображені імена клієнтів, а не їх номери, тоді необхідно об'єднати дві таблиці customers та orders. Виконайте такий запит:

niysql> select customers.name, avg(orders.amount)

-> from customers, orders

-> where customers.customer ID = orders.customerID

-> group by orders.customerlD;

Результат запиту:

name

avg(orders.amount)

Иван Лваненко

144.000000

Петро Петренко

42.000000

Сидор Сидоренко

141.000000

3 rows in set (0.11 sec)

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

Наприклад, виберіть із бази даних записи про тих клієнтів, хто зробив замовлення, середня вартість яких меньше 60.00. Виконайте такий запит:

mysql> select customerlD, avg(Amount)

-> from orders

-> group by customerlD

-> having avg(Amount) < 60.00;

Результат запиту:

customerlD

avg(Amount)

1

144.000000

3

141.000000

2 rows in set (0.00 sec)

Підрахунок кількості записів: функція count

  • Підрахуйте кількість клієнтів у таблиці базі даних. Інструкція:

mysql> select count(*) from customers;

Результат запиту показує, що у базі даних книгарні зареєстровано 5 клієнтів:

  • Підрахуйте кількість замовлень зареєстрованих у базі даних. Вказівка: кількість замовлень дорівнює кількості записів у таблиці orders.

Для того, щоб з'ясувати відмінність між функціями COUNT(поле_даних) та COUNT(DISTINCT поле_даних) підрахуйте кількість записів у полі orderlD таблиці order__items двома різними способами:

1. Виконайте запит із застосуванням функції COUNT (поле_даних):

mysql> select count(orderlD) from order_items;

Pезультат запиту показує, що у полі orderlD записано 7 номерів замовлень:

2. Виконайте тепер інший запит із застосуванням функції COUNT (DISTINCT поле_даних) :

mysql> select count(DISTINCT orderlD) from оrder_items;

Результат цього запиту показує, що у полі orderlD записано всього 4 різних ( унікальних) номерів замовлень. Тобто є номери замовлень, які повторюються. Функція count (DISTINCT orderlD) не враховує значень, якщо вони повторюються:

count(DISTINCT orderlD) 4

1 row in set (0.11 sec)

  • Підрахуйте кількість книжок про MySQL зареєстрованих у базі даних. Інструкція на запит:

mysql> select count(title)

-> from books

-> where title like ("%MySQL%");

Результат запиту:

count(title)

2

1 row in set (0.06 sec)

  • Підрахуйте кількість різних книжок у замовленні 4. За прийнятою схемою, у таблиці order_items різні найменування замовлених книжок позначені їх номерами ISBN, які записані окремими рядками напроти номера відповідного замовлення. Тому для підрахунку кількості різних найменувань книжок у замовленні достатньо з усіх номерів замовлень вибрати потрібний номер та підрахувати кількість ISBN, які відповідають цьому номеру:

mysql> select count(ISBN)

-> from order_items

-> where orderlD = 4;

Результат запиту:

count(ISBN)

3

1 row in set (0.00 sec)

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

mysql> select orderlD, count(ISBN)

-> from order_items

-> group by orderlD;

Результат запиту:

orderlD

count (ISBN)

1

1

2

2

3

1

4

3

4 row in set (0.06 sec)

Результат запиту:

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

  • Складіть список номерів замовлень, у яких було замовлено більше однієї книги.

Інструкція на запит:

mysql> select orderlD, count(ISBN)

-> from order_items

-> group by orderlD

-> having count(ISBN) > 1;

Peзультат запиту:

orderlD

count (ISBN)

2

2

4

3

2 rows in set (0.05 sec)

Зауваження. У запиті після інструкції SELECT можна вказати лише одне поле оrderlD, тоді у результаті запиту буде виведений лише список номерів замовлень (1-й стовпець), а дані про кількість замовлених книг (2-й стовпець) наведені не будуть.

  • Складіть список книжок з даними про те, у скількох замовленнях була замовлена кожна книжка.

Дані про назви книг містяться у таблиці books, а дані про замовлені екземпляри - у таблиці order_items, де кожен екземпляр у кожному замовленні записаний окремим рядком. Тому для одержання вказаного списку необхідно об'єднати ці дві таблиці, згрупувати книги за назвами або за ISBN та підрахувати кількість рядків у кожній групі. Інструкція на запит:

mysql> select books.title, count(order_items.order ID)

-> from books, order_items

-> where books.ISBN = order_items.ISBN

-> group by books.title;

Зауваження. Цей запит дає інформацію лише про те, у скількох замовленнях була замовлена кожна книжка. Але загальна кількість замовлених екземплярів кожної книги може бути більшою, тому що замовлення може містити декілька екземплярів кожної книги.

►► Підрахуйте, скільки разів (т.т. у скількох замовленнях) клієнти замовляли різні книги про MySQL. Для цього з результатів попереднього запиту необхідно вибрати лише ті книги, у назві яких міститься фрагмент "MySQL". Інструкція на запит:

mysql> select books, title, count (order_items.order ID)

-> from books, order_items

-> where books.ISBN = order_items.ISBN

-> and books.title like ("%MySQL%")

-> group by books.title;

Або

mysql> select books.title, count(order_іtems.orderID)

-> from books, order_items

-> where books.ISBN = order_items.ISBN

-> group by books.title

-> having books.title like ("%MySQL%");

Вказівка. Уважно розгляньте дві останні інструкції. З'ясуйте, в чому відмінність між ними, і чому вони дають однаковий результат.

  • Підрахуйте кількість різних найменувань книжок, які замовив кожен з клієнтів. Прізвища клієнтів зберігаються у таблиці customers, а найменування книг представлені їх унікальними номерами ISBN у таблиці order_items. Ці дві таблиці зв'язані через таблицю orders. Отже, запит має об'єднувати три таблиці - customers, orders та order_ items. Інструкція на запит:

mysql> select customers.name, count(DISTINCT order_items.ISBN)

-> from customers, orders, order_items

-> where customers.customerlD = orders.customer ID

-> and orders. orderlD = order_items.order ID

-> group by customers.name;

Pезультат запиту:

name

count(DISTINCT order_items.ISBN)

Иван Иваненко

2

Петро Петренко

1

Сидор Сидоренко

3

rows in set (0.06 sec)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]