Концепція дуже добре пояснюється прийнятою відповіддю, але я вважаю, що чим більше бачимо приклад, тим краще він занурюється. Ось окремий приклад:
1) Бос каже: "отримайте мені кількість предметів, які ми маємо на складі, згруповані за маркою"
Ви кажете : "немає проблем"
SELECT
BRAND
,COUNT(ITEM_ID)
FROM
ITEMS
GROUP BY
BRAND;
Результат:
+--------------+---------------+
| Brand | Count |
+--------------+---------------+
| H&M | 50 |
+--------------+---------------+
| Hugo Boss | 100 |
+--------------+---------------+
| No brand | 22 |
+--------------+---------------+
2) Бос каже: "Тепер заведіть мені список усіх товарів із їхнім брендом І кількістю предметів, які має відповідний бренд"
Ви можете спробувати:
SELECT
ITEM_NR
,BRAND
,COUNT(ITEM_ID)
FROM
ITEMS
GROUP BY
BRAND;
Але ви отримуєте:
ORA-00979: not a GROUP BY expression
Сюди OVER (PARTITION BY BRAND)
входять:
SELECT
ITEM_NR
,BRAND
,COUNT(ITEM_ID) OVER (PARTITION BY BRAND)
FROM
ITEMS;
Що означає:
COUNT(ITEM_ID)
- отримати кількість предметів
OVER
- Над набором рядків
(PARTITION BY BRAND)
- які мають однакову марку
І результат такий:
+--------------+---------------+----------+
| Items | Brand | Count() |
+--------------+---------------+----------+
| Item 1 | Hugo Boss | 100 |
+--------------+---------------+----------+
| Item 2 | Hugo Boss | 100 |
+--------------+---------------+----------+
| Item 3 | No brand | 22 |
+--------------+---------------+----------+
| Item 4 | No brand | 22 |
+--------------+---------------+----------+
| Item 5 | H&M | 50 |
+--------------+---------------+----------+
тощо ...