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

Làm cách nào để nhận phần trăm tổng số khi truy vấn có GROUP BY?

Đối với các tập hợp lớn, một JOIN có thể hoạt động tốt hơn truy vấn con.

SELECT ma.actor
     , COUNT(1) AS total
     , COUNT(1) / t.cnt * 100 AS `percentage`
  FROM movies_actors ma
 CROSS
  JOIN (SELECT COUNT(1) AS cnt FROM movies_actors) t
 GROUP
    BY ma.actor
     , t.cnt  

Đối với các tập hợp lớn và khi một tỷ lệ phần trăm lớn các hàng đang được trả về, thì phép toán JOIN thường có thể hoạt động tốt hơn một truy vấn con. Trong trường hợp của bạn, nó không phải là một truy vấn con tương quan, vì vậy MySQL không cần phải thực thi điều đó nhiều lần, vì vậy nó có thể không tạo ra bất kỳ sự khác biệt nào.

Lưu ý cho những người không phải là người hâm mộ của COUNT(1) ... chúng tôi có thể thay thế bất kỳ và tất cả các lần xuất hiện của COUNT(1) với COUNT(*) hoặc IFNULL(SUM(1),0) để đạt được kết quả tương đương.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truyền trực tuyến tập hợp kết quả lớn với MySQL

  2. Không thể kết nối với máy chủ MySQL cục bộ thông qua socket homebrew

  3. SQL Chỉ chọn các hàng có giá trị tối thiểu trên cột có điều kiện ở đâu

  4. PHP Database Dump Script - có vấn đề gì không?

  5. LỖI:Lỗi 1005:Không thể tạo bảng (errno:121)