Головна    Статті    Карта    Зв'язок   

Задачі з SQL

лютий 2015

Сontent

Оператор HAVING

Завдання

1. Вибрати номер замовлення, порахувати кількість проданого товару та порахувати суму проданих товарів кожного замовлення.
2. Вибрати номер замовлення, порахувати кількість проданого товару в якому сума продажу товару більша за 1000$.
3. Вибрати номер замовлення, в якому сума продажу товару більша за 1000$ та кількість продених товарів більша ніж 550 елементів.

Таблиця ordernumber

orderNumber productCodequantityOrderedpriceEach
10100S18_174930136
10100S18_22485055.09
10100S18_44092275.46
.........
10111S24_42582685.5

Декілька слів про оператор HAVING

Синтаксис оператора HAVING.

Оператор MySQL HAVING часто застосовується сувмісно з оператором GROUP BY.
Ви маєте змогу відсортувати певні групи колонок даних застосовуючи оператор MySQL HAVING, групи даних відбираються за допомогою оператора GROUP BY.
Якщо GROUP BY пропущений в SQL-запиті, то HAVING схожий до оператора WHERE.
Зауважте, що HAVING застосовується до групи рядків, так як WHERE застосовується до кожного індивідуального рядка.

Варто відмітити порядок опрацювання виразу SELECT:
1. FROM
2. WHERE
3. GROUP BY
4. HAVING
5. SELECT
6. ORDER BY


Цей порядок дещо не відповідає синтаксичному порядку загального виразу SELECT;

SELECT
[FROM table_references] [WHERE where_condition] [GROUP BY] [HAVING where_condition] [ORDER BY] [LIMIT ]


Рішення завдання

Переглянемо приклад застосування оператора MySQL HAVING.

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

SQL-запит:

SELECT ordernumber, 
       SUM(quantityOrdered) AS itemsCount, 
       SUM(priceeach) AS total 
FROM orderdetails   
GROUP BY ordernumber


Результат виконання SQL-запиту:

MySQL HAVING

2. Вибрати номер замовлення та порахувати кількість проданого товару в якому сума продажу товару більша за 1000$.

SQL-запит:

SELECT ordernumber,
       SUM(quantityOrdered) AS itemsCount,
       SUM(priceeach) AS total
FROM orderdetails
GROUP BY ordernumber
HAVING total > 1000


Результат виконання SQL-запиту:

MySQL HAVING

3. Вибрати номер замовлення, порахувати кількість проданого товару де сума продажу товару більша за 1000$.

Ми можемо конструювати складніші SQL-запити, застосовуючи логічні оператори такі як OR та AND.
Так, наприклад, ми можемо вибрати замовлення, що мають загальну суму продаж більше 1000$ та продану кількість товарів більше ніж 550 елементів.

SQL-запит:

SELECT ordernumber,
      sum(quantityOrdered) AS itemsCount,
      sum(priceeach) AS total
FROM orderdetails
GROUP BY ordernumber
HAVING total > 1000 AND itemsCount > 550


Результат виконання SQL-запиту:

MySQL HAVING

Між іншим...

Як варіант використання оператора HAVING, може бути SQL-запит щодо обєднання двух таблиць.
Умова: вибрати замовлення, що вже відвантажені та сума продажу становить більше 1500$.



SQL-запит:
SELECT a.ordernumber,
       SUM(priceeach) total,
      status<
FROM orderdetails a
INNER JOIN orders b ON b.ordernumber = a.ordernumber
GROUP BY ordernumber
HAVING b.status = 'Відвантажений' AND 
       total > 1500;