Menggunakan grup dengan di beberapa kolom

1037

Saya mengerti maksudnya GROUP BY x

Tetapi bagaimana cara GROUP BY x, ykerjanya, dan apa artinya?

l - '' '' '' '
sumber
2
Anda tidak akan menemukannya dijelaskan saat pertanyaan ini diajukan. Klausa GROUP BY dapat mengambil satu atau beberapa bidang. KELOMPOK OLEH pelanggan; GROUP BY nama belakang, nama depan; KELOMPOK TAHUN, toko, sku dll.
Bill

Jawaban:

2029

Group By Xberarti menempatkan semua yang memiliki nilai X yang sama dalam satu kelompok .

Group By X, Yberarti menempatkan semua yang memiliki nilai yang sama untuk X dan Y dalam satu grup .

Untuk mengilustrasikan menggunakan contoh, katakanlah kita memiliki tabel berikut, berkaitan dengan siapa yang menghadiri mata pelajaran apa di universitas:

Table: Subject_Selection

Subject   Semester   Attendee
---------------------------------
ITB001    1          John
ITB001    1          Bob
ITB001    1          Mickey
ITB001    2          Jenny
ITB001    2          James
MKB114    1          John
MKB114    1          Erica

Saat Anda menggunakan hanya group bypada kolom subjek; mengatakan:

select Subject, Count(*)
from Subject_Selection
group by Subject

Anda akan mendapatkan sesuatu seperti:

Subject    Count
------------------------------
ITB001     5
MKB114     2

... karena ada 5 entri untuk ITB001, dan 2 untuk MKB114

Jika kita ke group bydua kolom:

select Subject, Semester, Count(*)
from Subject_Selection
group by Subject, Semester

kami akan mendapatkan ini:

Subject    Semester   Count
------------------------------
ITB001     1          3
ITB001     2          2
MKB114     1          2

Ini karena, ketika kita mengelompokkan dua kolom, dikatakan "Kelompokkan mereka sehingga semua yang memiliki Subjek dan Semester yang sama berada di grup yang sama, dan kemudian hitung semua fungsi agregat (Hitung, Jumlah, Rata-Rata, dll.) ) untuk masing - masing grup tersebut " . Dalam contoh ini, ini ditunjukkan oleh fakta bahwa, ketika kami menghitungnya, ada tiga orang yang melakukan ITB001 di semester 1, dan dua melakukannya di semester 2. Kedua orang yang melakukan MKB114 berada di semester 1, jadi tidak ada baris untuk semester 2 (tidak ada data yang cocok dengan grup "MKB114, Semester 2")

Semoga itu masuk akal.

Menghancurkan
sumber
11
@Smashery: Jadi, apakah ini juga berarti GROUP BY A,Bsama dengan GROUP BY B,A?
tumchaaditya
23
Ya, benar. Saya tidak bisa mengatakan dengan pasti apakah mereka seefisien satu sama lain, tetapi mereka akan memberikan hasil yang sama, ya.
Smashery
2
Mungkin di sini harus ditambahkan bahwa ada perbedaan antara GROUP BY a, bdan GROUP BY a AND bkarena yang kedua hanya daftar item yang dikelompokkan dengan konten yang persis sama dan tidak ada "grup bawah". Dalam hal ini hasilnya akan sama seperti yang pertama.
Dwza
5
Saya ingin menambahkan bahwa urutan pengelompokan menurut kolom tidak menjadi masalah. Dalam grup contoh di atas oleh Semester, Subjek akan memberikan hasil yang sama
user2441441
2
baik, grup dengan a, b dan grup dengan b, a TIDAK mengembalikan hasil yang sama - baris ditampilkan dalam urutan yang berbeda
fanny
33

The GROUP BYklausa digunakan dalam hubungannya dengan fungsi agregat untuk kelompok hasil-set oleh satu atau lebih kolom. misalnya:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

Ingat pesanan ini:

1) SELECT (digunakan untuk memilih data dari database)

2) FROM (klausa digunakan untuk mendaftar tabel)

3) WHERE (klausa digunakan untuk memfilter catatan)

4) GROUP BY (klausa dapat digunakan dalam pernyataan SELECT untuk mengumpulkan data di beberapa catatan dan mengelompokkan hasil dengan satu atau lebih kolom)

5) HAVING (klausa digunakan dalam kombinasi dengan klausa GROUP BY untuk membatasi grup dari baris yang dikembalikan hanya kepada mereka yang kondisinya BENAR)

6) ORDER BY (kata kunci digunakan untuk mengurutkan hasil-set)

Anda dapat menggunakan semua ini jika Anda menggunakan fungsi agregat, dan ini adalah urutan yang harus ditetapkan, jika tidak, Anda bisa mendapatkan kesalahan.

Fungsi Agregat adalah:

MIN mengembalikan nilai terkecil dalam kolom yang diberikan

SUM mengembalikan jumlah nilai numerik dalam kolom yang diberikan

AVG mengembalikan nilai rata-rata kolom yang diberikan

COUNT mengembalikan jumlah total nilai dalam kolom yang diberikan

COUNT (*) mengembalikan jumlah baris dalam tabel

S. Mayol
sumber
1
tapi di mana kita meletakkan 2 kolom, bagaimana cara agregat berdasarkan 2 / lebih kolom adalah pertanyaan
Chaitanya Bapat
Hai Chaitanya, saya tidak tahu apakah ini yang Anda minta tetapi izinkan saya memberi Anda beberapa contoh saja. Jika Anda memiliki tabel produk yang Anda gunakan fungsi agregat dengan cara ini, di bawah ini adalah dua skenario: SELECT AVG (instock) DARI produk; Ini akan menghitung unit rata-rata dalam stok tabel produk. Sekarang Anda ingin menghitung unit dalam stok berdasarkan kategori produk, Anda harus menggunakan fungsi AVG dengan klausa GROUP BY seperti ini: SELECT categoryId, AVG (instock) DARI produk produk GROUP BY kategoriId;
S. Mayol
Ini bahkan tidak menjawab pertanyaan dari jauh ... Pertanyaan di sini adalah bagaimana mencapai "pengelompokan dirantai" dari "subjek" dan "semester" pada saat yang sama, seperti yang dijelaskan dalam contoh yang diberikan ...
MahNas92