Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Sử dụng `rand ()` với `have`

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ể.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql hiển thị các khe thời gian có sẵn và các khe thời gian bận từ bảng

  2. MYSQL - thêm hoặc chèn giá trị vào một cột tùy thuộc vào việc nó trống hay không

  3. Truy vấn MySQL:Truy vấn tất cả các mục nhập cũ hơn 1 năm

  4. PHP 5.4 PDO không thể kết nối với MySQL 4.1+ bằng cách sử dụng xác thực không an toàn cũ

  5. Không thể truy cập MySQL sau khi nó tự động tạo mật khẩu tạm thời