Seperti yang didokumentasikan di bawah SELECT
Sintaks:
Dengan kata lain, ini diterapkan setelah operasi pengelompokan telah dilakukan (berbeda dengan WHERE
, yang dilakukan sebelum operasi pengelompokan apa pun). Lihat WHERE vs HAVING
.
Oleh karena itu, kueri Anda saat ini pertama-tama membentuk kumpulan hasil dari berikut ini:
SELECT COUNT(domain) AS `sum domains`, file
FROM `table`
GROUP BY Number
Lihat di sqlfiddle :
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 | | 1 | eee.com_1 |
Seperti yang Anda lihat, nilai yang dipilih untuk file
kolom hanyalah salah satu nilai dari setiap grup—seperti yang didokumentasikan dalam MySQL Ekstensi ke GROUP BY
:
Kueri Anda saat ini kemudian melanjutkan untuk memfilter hasil ini sesuai dengan HAVING
klausa:
HAVING COUNT(Number) > 1 AND file LIKE '%\_1'
Dengan nilai file
dipilih di atas, setiap grup cocok dengan kriteria kedua; dan dua kelompok pertama cocok dengan kriteria pertama. Oleh karena itu hasil query lengkap
adalah:
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 |
Mengikuti komentar Anda di atas , Anda ingin memfilter catatan pada file
sebelum pengelompokan dan kemudian memfilter grup yang dihasilkan untuk grup yang berisi lebih dari satu kecocokan. Oleh karena itu gunakan WHERE
dan HAVING
masing-masing (dan pilih Number
bukannya file
untuk mengidentifikasi setiap kelompok):
SELECT Number, COUNT(*) AS `sum domains`
FROM `table`
WHERE file LIKE '%\_1'
GROUP BY Number
HAVING `sum domains` > 1
Lihat di sqlfiddle :
| NUMBER | SUM DOMAINS | ------------------------ | 222 | 2 |