Концепция очень хорошо объясняется принятым ответом, но я считаю, что чем больше примеров человек видит, тем лучше он погружается.Вот инкрементный пример:
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;
Whic означает:
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 |
+--------------+---------------+----------+
и т.д. ...
2-е объяснение линия @ код, если он скажет «два, потому что есть две записи dept_no = 20». Любой может редактировать? :) –
Камило, я исправил пример. Спасибо. – Guy
thanx для AskTom ссылка –