GROUP_ID() memberikan nomor urut pada setiap kelompok duplikat yang dihasilkan oleh ekstensi GROUP BY, seperti ROLLUP, CUBE, dan GROUPING SETS. Fungsi ini digunakan untuk mengidentifikasi dan menyaring kelompok duplikat dalam kueri agregasi yang kompleks.
Deskripsi
Ekstensi GROUP BY dapat menghasilkan pengelompokan duplikat dalam satu set hasil. GROUP_ID() mengembalikan nilai INTEGER yang memberi nomor setiap kemunculan kelompok duplikat, dimulai dari 0. Jika suatu kelompok muncul sebanyak *n* kali, kemunculannya akan diberi nilai 0 hingga n-1.
GROUP_ID() hanya berlaku untuk pernyataan SELECT yang mengandung klausa GROUP BY.
| Occurrence | GROUP_ID value |
|---|---|
| First | 0 |
| Second | 1 |
| Third | 2 |
| ... | ... |
Contoh
Contoh-contoh berikut menggunakan tabel berikut:
a | b | c
---+---+---
1 | 2 | 3Tidak ada kelompok duplikat
GROUP BY ROLLUP(a, b, c) menghasilkan empat kelompok berbeda: (a, b, c), (a, b), (a), dan (). Tidak terdapat duplikat, sehingga nilai GROUP_ID() adalah 0 untuk semua baris.
SELECT a, b, c, grouping(a, b, c), group_id()
FROM t
GROUP BY ROLLUP(a, b, c)
ORDER BY grouping(a, b, c);Hasil:
a | b | c | grouping | group_id
---+---+---+----------+----------
1 | 2 | 3 | 0 | 0
1 | 2 | | 1 | 0
1 | | | 3 | 0
| | | 7 | 0
(4 rows)Kelompok duplikat
GROUP BY ROLLUP(a, b, c), a, b menghasilkan empat baris yang sama, tetapi penambahan a, b ke dalam klausa GROUP BY menyebabkan kelompok (a, b) muncul tiga kali. GROUP_ID() memberi nomor pada duplikat tersebut sebagai 0, 1, dan 2.
SELECT a, b, c, grouping(a, b, c), group_id()
FROM t
GROUP BY ROLLUP(a, b, c), a, b
ORDER BY grouping(a, b, c);Hasil:
a | b | c | grouping | group_id
---+---+---+----------+----------
1 | 2 | 3 | 0 | 0
1 | 2 | | 1 | 0
1 | 2 | | 1 | 1
1 | 2 | | 1 | 2
(4 rows)