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

Sử dụng mệnh đề count trong where:sử dụng hàm nhóm không hợp lệ

Bạn chỉ có thể sử dụng các hàm tổng hợp như COUNT() trong một HAVING hoặc trong SELECT mệnh đề khi GROUP BY Được sử dụng. WHERE mệnh đề hoạt động trên các hàng đến từ FROM mệnh đề. Không có sự tổng hợp nào diễn ra, vì vậy không có cách nào để các hàm tổng hợp có ý nghĩa.

Có vẻ như những gì bạn muốn làm là tìm từ bảng GHI DANH tất cả các học sinh xuất hiện nhiều hơn một lần. Sau đó, bạn muốn biết thêm chi tiết về những sinh viên đó. Có nhiều cách để thực hiện việc này, nhưng tôi khuyên bạn nên sử dụng một truy vấn con.

SELECT s.*
  FROM student AS s
  JOIN (
    SELECT e.sno
      FROM enroll AS e
     GROUP BY e.sno
    HAVING COUNT(*) > 1
  ) AS e
    ON e.sno = s.sno
 ORDER BY s.age DESC
 LIMIT 10

Truy vấn con ở đó sau JOIN thực hiện phép tính đầu tiên đó (sinh viên có nhiều hàng trong GHI DANH) và về cơ bản tạo ra một bảng giả với danh sách ID sinh viên. Vì chúng tôi đang thực hiện phép nối bên trong, chỉ các hàng trong bảng STUDENT có sno trong truy vấn con của chúng tôi sẽ hiển thị. Về cơ bản, điều đó được thực hiện bởi ON mệnh đề.

Vì bạn đã nói trong một nhận xét rằng bạn muốn có thể áp dụng các điều kiện bổ sung cho học sinh, tôi đã thêm vào một số mã ví dụ nơi điều đó sẽ xảy ra. Vì thông tin đó đến từ bảng STUDENT, nó có thể được thực hiện bên ngoài truy vấn con. Bạn không nói rõ cụ thể "sinh viên lớn tuổi nhất" nghĩa là gì, vì vậy tôi chỉ giả sử bạn muốn 10 người lớn tuổi nhất đăng ký nhiều khóa học. Bạn có thể điều chỉnh dựa trên nhu cầu của mình.

Hãy cho tôi biết nếu bất kỳ điều nào trong số này không hợp lý và tôi sẽ cố gắng giải thích chi tiết hơn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DataSourceInitializer không hoạt động khi khởi động Spring 1.2

  2. Múi giờ MySQL

  3. Chèn ngày hiện tại ở định dạng datetime mySQL

  4. VB.NET:Bộ khởi tạo kiểu cho 'MySql.Data.MySqlClient.Replication.ReplicationManager' đã đưa ra một ngoại lệ

  5. thực hiện quy trình được lưu trữ trong tập lệnh ứng dụng google