Như được ghi lại trong SELECT
Cú pháp:
Nói cách khác, nó được áp dụng sau hoạt động nhóm đã được thực hiện (trái ngược với WHERE
, được thực hiện trước bất kỳ hoạt động nhóm). Xem WHERE so với HAVING
.
Do đó, truy vấn hiện tại của bạn trước tiên tạo thành tập kết quả từ sau:
SELECT COUNT(domain) AS `sum domains`, file
FROM `table`
GROUP BY Number
Xem nó trên sqlfiddle :
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 | | 1 | eee.com_1 |
Như bạn có thể thấy, các giá trị được chọn cho tệp file
cột chỉ là một trong các giá trị từ mỗi nhóm — như được ghi lại trong MySQL Tiện ích mở rộng cho GROUP BY
:
Sau đó, truy vấn hiện tại của bạn sẽ tiếp tục lọc các kết quả này theo HAVING
của bạn mệnh đề:
HAVING COUNT(Number) > 1 AND file LIKE '%\_1'
Với các giá trị của file
được chọn ở trên, mỗi nhóm duy nhất phù hợp với tiêu chí thứ hai; và hai nhóm đầu tiên phù hợp với tiêu chí đầu tiên. Do đó, kết quả của truy vấn hoàn chỉnh
là:
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 |
Theo dõi nhận xét của bạn ở trên , bạn muốn lọc các bản ghi trên tệp file
trước đây nhóm và sau đó lọc các nhóm kết quả cho những nhóm chứa nhiều hơn một kết quả phù hợp. Do đó, hãy sử dụng WHERE
và HAVING
tương ứng (và chọn Number
thay vì file
để xác định từng nhóm):
SELECT Number, COUNT(*) AS `sum domains`
FROM `table`
WHERE file LIKE '%\_1'
GROUP BY Number
HAVING `sum domains` > 1
Xem nó trên sqlfiddle :
| NUMBER | SUM DOMAINS | ------------------------ | 222 | 2 |