5.1 MEMILIKI pernyataan
Ada operator lain yang berguna dalam SQL yang digunakan dengan GROUP BY
, namanya HAVING
.
Artinya, ini sepenuhnya analog dengan operator WHERE
. Ini hanya WHERE
memungkinkan Anda menyetel filter baris sebelum pengelompokan, dan dengan bantuan HAVING
Anda dapat menyetel filter yang diterapkan ke rekaman setelah pengelompokan.
Tampilan umum kueri saat menggunakan pengelompokan dan pemfilteran hasil pengelompokan adalah sebagai berikut:
SELECT columns
FROM table
WHERE condition
GROUP BY columns
HAVING condition
HAVING
hanya dapat digunakan jika permintaan berisi GROUP BY
.
Mari tulis kueri di mana kami menampilkan jumlah karyawan yang direkrut berdasarkan tahun.
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
Dan hasil dari kueri ini:
sewa_tahun | total |
---|---|
2012 | 1 |
2013 | 1 |
2014 | 1 |
2015 | 2 |
2018 | 1 |
Dan sekarang kami mengecualikan tahun-tahun ketika satu atau lebih sedikit karyawan dipekerjakan. Contoh:
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
HAVING total > 1
Dan hasil dari kueri ini:
sewa_tahun | total |
---|---|
2015 | 2 |
5.3 Urutan pelaksanaan pernyataan
Untuk menulis kueri SQL yang benar dan efisien, Anda perlu memahami bagaimana kueri dijalankan oleh server SQL.
Prosedur untuk melakukan tindakan diatur secara ketat dan tidak bergantung pada keinginan Anda. Anda tidak dapat mengatur ulang operator dan mendapatkan urutan yang berbeda.
Kueri SQL dijalankan dalam beberapa tahap dalam urutan ini.
- Tahap 1 - mengambil baris
- Pertama, semua baris dari tabel yang ditentukan dipilih.
- Kemudian bidang terhitung ditambahkan ke dalamnya.
- Dan kemudian dari semua baris, hanya yang memenuhi syarat yang tersisa
WHERE
- Tahap 2 - pengelompokan
- Pengelompokan kemudian diterapkan pada hasil.
- Selama pengelompokan, bidang seperti
COUNT(*)
. - Terakhir, filter diterapkan ke hasil pengelompokan
HAVING
. - Tahap 3 - menyortir
- Baris yang diperoleh pada langkah sebelumnya diurutkan menggunakan
ORDER BY
.
Terakhir, hasilnya dapat dipangkas dengan LIMIT
dan OFFSET
.
GO TO FULL VERSION