Das Konzept wird durch die akzeptierte Antwort sehr gut erklärt, aber ich finde, je mehr Beispiele man sieht, desto besser sinkt es ein. Hier ist ein inkrementelles Beispiel:
1) Boss sagt "Hol mir die Anzahl der Artikel, die wir auf Lager haben, gruppiert nach Marke"
Sie sagen : "kein Problem"
SELECT
BRAND
,COUNT(ITEM_ID)
FROM
ITEMS
GROUP BY
BRAND;
Ergebnis:
+--------------+---------------+
| Brand | Count |
+--------------+---------------+
| H&M | 50 |
+--------------+---------------+
| Hugo Boss | 100 |
+--------------+---------------+
| No brand | 22 |
+--------------+---------------+
2) Der Chef sagt: "Jetzt bekomme ich eine Liste aller Artikel mit ihrer Marke UND der Anzahl der Artikel, die die jeweilige Marke hat."
Sie können versuchen:
SELECT
ITEM_NR
,BRAND
,COUNT(ITEM_ID)
FROM
ITEMS
GROUP BY
BRAND;
Aber du bekommst:
ORA-00979: not a GROUP BY expression
Hier kommt das ins OVER (PARTITION BY BRAND)
Spiel:
SELECT
ITEM_NR
,BRAND
,COUNT(ITEM_ID) OVER (PARTITION BY BRAND)
FROM
ITEMS;
Was bedeutet:
COUNT(ITEM_ID)
- Holen Sie sich die Anzahl der Artikel
OVER
- Über den Satz von Zeilen
(PARTITION BY BRAND)
- die die gleiche Marke haben
Und das Ergebnis ist:
+--------------+---------------+----------+
| 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 |
+--------------+---------------+----------+
etc...