Tôi nghĩ rằng vấn đề là HAVING được áp dụng sau GROUP BY, nhưng vẫn trước giai đoạn CHỌN. Tôi nhận ra rằng nó khó hiểu vì mệnh đề HAVING tham chiếu đến một cột từ câu lệnh SELECT, nhưng tôi nghĩ về cơ bản nó chỉ thực thi bất kỳ thứ gì có trong câu lệnh SELECT hai lần - một lần đối với câu lệnh Have và sau đó một lần nữa đối với câu lệnh SELECT.
Ví dụ:xem câu trả lời này .
Lưu ý, nó đặc biệt khó hiểu vì nếu bạn tham chiếu đến tên cột không xuất hiện trong câu lệnh SELECT trong mệnh đề HAVING, nó sẽ gây ra lỗi.
Ví dụ: trò chơi này
Nhưng theo điều đó ở trên, nó sẽ vẫn cho phép bạn thực sự lọc dựa trên kết quả của một hàm không xuất hiện trong đầu ra. Tóm lại, mệnh đề HAVING vẫn đang làm những gì bạn muốn, nhưng bạn không thể vừa lọc một giá trị ngẫu nhiên vừa hiển thị nó cùng một lúc bằng cách sử dụng cách tiếp cận đó. Nếu bạn cần làm điều đó, trước tiên bạn cần sử dụng truy vấn con để sửa giá trị, sau đó truy vấn bên ngoài có thể lọc và hiển thị trên đó.
Ngoài ra, để làm cho nó rõ ràng, có lẽ chỉ nên sử dụng RAND () trong mệnh đề có chứ không phải trong phần SQL. Mặc dù tôi hiểu rằng câu hỏi này đang hỏi tại sao nó đang làm điều này thay vì cố gắng giải quyết vấn đề một cách cụ thể.