Apa arti klausa SQL "GROUP BY 1" artinya?


203

Seseorang mengirim saya query SQL di mana GROUP BYklausa terdiri dari pernyataan: GROUP BY 1.

Ini pasti salah cetak kan? Tidak ada kolom yang diberi alias 1. Apa artinya ini? Apakah saya berhak berasumsi bahwa ini pasti kesalahan ketik?


6
Ini bukan kesalahan ketik, ini kolom pertama dari set hasil Anda
Lamak

9
Perhatikan bahwa sintaks ini non-portabel. Ini akan berperilaku berbeda pada database selain mysql. Di Oracle, misalnya, diperlakukan sebagai konstanta.
Russell Reed

2
@RussellReed Ya. sayangnya (karena menggunakan alias kadang-kadang sangat membantu) sql ansi tidak memungkinkan pengelompokan menurut kolom ordinal. Alasannya adalah bahwa grup dengan terjadi sebelum proyeksi. Tapi lalu .. bagaimana ketika kita memiliki ekspresi pengelompokan dengan puluhan baris .. kita berakhir dengan .. mutiples dari puluhan baris dalam pernyataan sql terakhir.
javadba

Jawaban:


233

Itu berarti mengelompokkan berdasarkan kolom pertama terlepas dari apa namanya. Anda dapat melakukan hal yang sama dengannya ORDER BY.


74
SELECT account_id, open_emp_id
         ^^^^        ^^^^
          1           2

FROM account
GROUP BY 1;

Dalam kueri di atas GROUP BY 1mengacu pada first column in select statementyang account_id.

Anda juga dapat menentukan di ORDER BY.

Catatan: Angka dalam ORDER BY dan GROUP BY selalu dimulai dengan 1 bukan dengan 0.


25

Selain pengelompokan berdasarkan nama bidang, Anda juga dapat mengelompokkan berdasarkan urutan, atau posisi bidang dalam tabel. 1 sesuai dengan bidang pertama (terlepas dari nama), 2 adalah yang kedua, dan seterusnya.

Ini umumnya keliru jika Anda mengelompokkan sesuatu yang spesifik, karena struktur tabel / tampilan dapat berubah. Selain itu, mungkin sulit untuk dengan cepat memahami apa yang dilakukan permintaan SQL Anda jika Anda belum menghafal bidang tabel.

Jika Anda mengembalikan satu set unik, atau dengan cepat melakukan pencarian sementara, ini adalah sintaks singkatan yang bagus untuk mengurangi mengetik. Jika Anda berencana untuk menjalankan kueri lagi di beberapa titik, saya akan merekomendasikan mengganti mereka untuk menghindari kebingungan di masa depan dan komplikasi yang tidak terduga (karena perubahan skema)


10
Memberi +1 untuk "jangan lakukan ini" dan saya akan menambahkan bahwa alasan terbaik untuk menghindarinya adalah itu tidak dapat dibaca.
Yuck

11

Ini akan dikelompokkan berdasarkan bidang pertama dalam klausa pilih


5

Itu berarti grup sql dengan kolom 1 di klausa pilih Anda, kami selalu menggunakan ini GROUP BY 1bersama dengan ORDER BY 1, selain Anda juga dapat menggunakan seperti ini GROUP BY 1,2,3.., tentu saja itu nyaman bagi kami tetapi Anda perlu memperhatikan kondisi itu hasilnya mungkin bukan apa yang Anda ingin jika seseorang telah memodifikasi kolom pilih Anda, dan itu tidak divisualisasikan


4

Ini akan dikelompokkan berdasarkan posisi kolom yang Anda tempatkan setelah grup berdasarkan klausa.

misalnya jika Anda menjalankan ' SELECT SALESMAN_NAME, SUM(SALES) FROM SALES GROUP BY 1' itu akan dikelompokkan berdasarkan SALESMAN_NAME.

Salah satu risiko melakukan itu adalah jika Anda menjalankan ' Select *' dan untuk beberapa alasan Anda membuat ulang tabel dengan kolom pada urutan yang berbeda, itu akan memberi Anda hasil yang berbeda dari yang Anda harapkan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.