Seseorang mengirim saya query SQL di mana GROUP BY
klausa 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?
Seseorang mengirim saya query SQL di mana GROUP BY
klausa 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?
Jawaban:
SELECT account_id, open_emp_id
^^^^ ^^^^
1 2
FROM account
GROUP BY 1;
Dalam kueri di atas GROUP BY 1
mengacu pada first column in select statement
yang
account_id
.
Anda juga dapat menentukan di ORDER BY
.
Catatan: Angka dalam ORDER BY dan GROUP BY selalu dimulai dengan 1 bukan dengan 0.
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)
Ini akan dikelompokkan berdasarkan bidang pertama dalam klausa pilih
Itu berarti grup sql dengan kolom 1 di klausa pilih Anda, kami selalu menggunakan ini GROUP BY 1
bersama 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
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.