Komentar panjang di sini;
Ya, Anda tidak bisa melakukan itu. Pikirkanlah... Jika Anda memiliki tabel seperti ini:
Col1 Col2 Col3
A A 1
B A 2
C A 3
Dan Anda mengelompokkan hanya dengan Col2
, yang akan dikelompokkan menjadi satu baris... apa yang terjadi pada Col1
dan Col3
? Keduanya memiliki 3 nilai baris yang berbeda. Bagaimana seharusnya DBMS Anda menampilkannya?
Col1 Col2 Col3
A? A 1?
B? 2?
C? 3?
Inilah sebabnya mengapa Anda harus mengelompokkan berdasarkan semua kolom, atau menggabungkan atau menggabungkannya. (SUM()
,MAX()
, MIN()
, dll..)
Tunjukkan kepada kami bagaimana Anda ingin hasilnya terlihat dan saya yakin kami dapat membantu Anda.
Edit - Jawaban:
Pertama, terima kasih telah memperbarui pertanyaan Anda. Kueri Anda tidak memiliki id
tetapi hasil yang Anda harapkan, jadi saya akan menjawab masing-masing secara terpisah.
Tanpa id
Anda masih perlu mengelompokkan menurut semua kolom untuk mencapai apa yang Anda tuju. Mari kita berjalan melewatinya.
Jika Anda menjalankan kueri tanpa grup apa pun dengan:
select col1, col2, col3 from table where col3='200'
Anda akan mendapatkan ini kembali:
+----------+-------------+-------+
| col1 | col2 | col3 |
+----------+-------------+-------+
| 1 | some text 1 | 200 |
| 2 | some text 1 | 200 |
| 5 | some text 1 | 200 |
| 1 | some text 1 | 200 |
+----------+-------------+-------+
Jadi sekarang Anda hanya ingin melihat col1 = 1
baris sekali. Tetapi untuk melakukannya, Anda perlu menggulung semua dari kolom ke atas, sehingga DBMS Anda tahu apa yang harus dilakukan dengan masing-masing kolom. Jika Anda mencoba mengelompokkan hanya dengan col1
, Anda DBMS akan mengalami kesalahan karena Anda tidak memberi tahu apa yang harus dilakukan dengan data tambahan di col2
dan col3
:
select col1, col2, col3 from table where col3='200' group by col1 --Errors
+----------+-------------+-------+
| col1 | col2 | col3 |
+----------+-------------+-------+
| 1 | some text 1 | 200 |
| 2 | some text 1 | 200 |
| 5 | some text 1 | 200 |
| ? | some text 1?| 200? |
+----------+-------------+-------+
Jika Anda mengelompokkan ketiganya, DBMS Anda tahu untuk mengelompokkan seluruh baris (yang Anda inginkan), dan hanya akan menampilkan baris duplikat satu kali:
select col1, col2, col3 from table where col3='200' group by col1, col2, col3
+----------+-------------+-------+
| col1 | col2 | col3 |
+----------+-------------+-------+
| 1 | some text 1 | 200 |
| 2 | some text 1 | 200 | --Desired results
| 5 | some text 1 | 200 |
+----------+-------------+-------+
Dengan id
Jika Anda ingin melihat id
, Anda harus memberi tahu DBMS Anda yang id
menampilkan. Meskipun kami mengelompokkan berdasarkan semua kolom, Anda tidak akan mendapatkan hasil yang diinginkan, karena id
kolom akan membuat setiap baris berbeda (Mereka tidak akan lagi dikelompokkan bersama):
select id, col1, col2, col3 from table where col3='200' group by id, col1, col2, col3
+--------+----------+-------------+-------+
| id | col1 | col2 | col3 |
+--------+----------+-------------+-------+
| 2 | 1 | some text 1 | 200 | --id = 2
| 3 | 2 | some text 1 | 200 |
| 7 | 5 | some text 1 | 200 |
| 8 | 1 | some text 1 | 200 | --id = 8
+--------+----------+-------------+-------+
Jadi untuk mengelompokkan baris ini, kita perlu secara eksplisit mengatakan apa yang harus dilakukan dengan id
s. Berdasarkan hasil yang Anda inginkan, Anda ingin memilih id = 2
, yang merupakan minimum id
, jadi mari kita gunakan MIN()
:
select MIN(id), col1, col2, col3 from table where col3='200' group by col1, col2, col3
--Note, MIN() is an aggregate function, so id need not be in the group by
Yang mengembalikan hasil yang Anda inginkan (dengan id
):
+--------+----------+-------------+-------+
| id | col1 | col2 | col3 |
+--------+----------+-------------+-------+
| 2 | 1 | some text 1 | 200 |
| 3 | 2 | some text 1 | 200 |
| 7 | 5 | some text 1 | 200 |
+--------+----------+-------------+-------+
Pemikiran terakhir
Inilah dua baris masalah Anda:
+--------+----------+-------------+-------+
| id | col1 | col2 | col3 |
+--------+----------+-------------+-------+
| 2 | 1 | some text 1 | 200 |
| 8 | 1 | some text 1 | 200 |
+--------+----------+-------------+-------+
Setiap kali Anda menekan ini, pikirkan saja apa yang Anda inginkan untuk dilakukan setiap kolom, satu per satu. Anda harus menangani semua kolom setiap kali Anda melakukan pengelompokan atau agregat.
id
, Anda hanya ingin melihatid = 2
, yang merupakanMIN()
co1
, Anda hanya ingin melihat nilai yang berbeda, jadiGROUP BY
col2
, Anda hanya ingin melihat nilai yang berbeda, jadiGROUP BY
col3
, Anda hanya ingin melihat nilai yang berbeda, jadiGROUP BY