Konsep ini dijelaskan dengan sangat baik oleh jawaban yang diterima, tetapi saya menemukan bahwa semakin banyak contoh yang dilihat, semakin baik tenggelam. Berikut adalah contoh tambahan:
1) Boss berkata "dapatkan saya jumlah barang yang ada dalam stok yang dikelompokkan berdasarkan merek"
Anda mengatakan : "tidak masalah"
SELECT
BRAND
,COUNT(ITEM_ID)
FROM
ITEMS
GROUP BY
BRAND;
Hasil:
+--------------+---------------+
| Brand | Count |
+--------------+---------------+
| H&M | 50 |
+--------------+---------------+
| Hugo Boss | 100 |
+--------------+---------------+
| No brand | 22 |
+--------------+---------------+
2) Bos berkata "Sekarang ambilkan saya daftar semua barang, dengan merek mereka DAN jumlah barang yang dimiliki masing-masing merek"
Anda dapat mencoba:
SELECT
ITEM_NR
,BRAND
,COUNT(ITEM_ID)
FROM
ITEMS
GROUP BY
BRAND;
Tapi Anda mendapatkan:
ORA-00979: not a GROUP BY expression
Di sinilah OVER (PARTITION BY BRAND)
masuk:
SELECT
ITEM_NR
,BRAND
,COUNT(ITEM_ID) OVER (PARTITION BY BRAND)
FROM
ITEMS;
Yang artinya:
COUNT(ITEM_ID)
- dapatkan jumlah item
OVER
- Lebih dari set baris
(PARTITION BY BRAND)
- yang memiliki merek yang sama
Dan hasilnya adalah:
+--------------+---------------+----------+
| 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 |
+--------------+---------------+----------+
dll ...