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

Có cách nào đơn giản hơn để tìm MODE (S) của một số giá trị trong MySQL không

Bạn đang ở rất gần với truy vấn cuối cùng. Sau đây tìm thấy một chế độ:

SELECT value, occurs
FROM (SELECT value,count(*) as occurs
      FROM t200
      GROUP BY `value`
      LIMIT 1
     ) T1

Tuy nhiên, tôi nghĩ câu hỏi của bạn là về nhiều chế độ:

SELECT value, occurs
FROM (SELECT value, count(*) as occurs
      FROM t200
      GROUP BY `value`
     ) T1
WHERE occurs = (select max(occurs)
                from (select `value`, count(*) as occurs
                      from t200
                      group by `value`
                     ) t
               );

CHỈNH SỬA:

Điều này dễ dàng hơn nhiều trong hầu hết các cơ sở dữ liệu khác. MySQL không hỗ trợ with cũng không phải các chức năng cửa sổ / phân tích.

Truy vấn của bạn (hiển thị bên dưới) không thực hiện những gì bạn nghĩ:

  SELECT value, occurs  
  FROM (SELECT value, count(*) as occurs
        FROM t200
        GROUP BY `value`
       ) T1
  HAVING occurs = max(occurs) ; 

having mệnh đề đề cập đến biến occurs nhưng có sử dụng max(occurs) . Do việc sử dụng max(occurs) đây là một truy vấn tổng hợp trả về một hàng, tóm tắt tất cả các hàng từ truy vấn con.

Biến occurs không sử dụng để phân nhóm. Vậy, MySQL sử dụng giá trị nào? Nó sử dụng một tùy ý giá trị từ một trong các hàng trong truy vấn con. Giá trị tùy ý này có thể khớp hoặc có thể không. Nhưng, giá trị chỉ đến từ một hàng. Không có sự lặp lại nào đối với 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. Hiệu suất MYSQL HOẶC so với IN

  2. PHP:nhiều truy vấn SQL trong một câu lệnh mysql_query

  3. bảng truy vấn mỗi giây để thông báo. Nó có phải là một thực hành tốt?

  4. Làm cách nào để tạo một truy vấn mysql liên tục làm mới trong PHP?

  5. Làm thế nào để gợi ý chỉ mục để sử dụng trong truy vấn chọn MySQL?