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

mysql chọn n giá trị tối đa hàng đầu

Đối với n =2, bạn có thể

SELECT max(column1) m 
FROM table t
GROUP BY column2
UNION
SELECT max(column1) m
FROM table t
WHERE column1 NOT IN (SELECT max(column1) 
                      WHERE column2 = t.column2)

đối với bất kỳ cách tiếp cận nào bạn có thể sử dụng được mô tả tại đây để mô phỏng xếp hạng trên phân vùng.

CHỈNH SỬA:Trên thực tế, điều này bài viết sẽ cung cấp cho bạn chính xác những gì bạn cần.

Về cơ bản nó là một cái gì đó như thế này

SELECT t.*
FROM
   (SELECT grouper,
          (SELECT val 
           FROM table li
           WHERE li.grouper = dlo.grouper
           ORDER BY
                 li.grouper, li.val DESC
           LIMIT 2,1) AS mid
   FROM 
      (
      SELECT DISTINCT grouper
      FROM table
      ) dlo 
   ) lo, table t
WHERE t.grouper = lo.grouper
      AND t.val > lo.mid

Thay thế grouper với tên của cột bạn muốn nhóm theo và val với tên của cột chứa các giá trị.

Để tìm ra cách hoạt động chính xác của nó, hãy đi từng bước từ truy vấn bên trong nhất và chạy chúng.

Ngoài ra, có một sự đơn giản hóa nhỏ - truy vấn con tìm mid có thể trả về NULL nếu danh mục nhất định không có đủ giá trị vì vậy nên có COALESCE của danh mục đó thành một hằng số nào đó sẽ có ý nghĩa khi so sánh (trong trường hợp của bạn, nó sẽ là MIN miền của val, trong bài viết nó là MAX).

EDIT2: Tôi quên đề cập rằng chính LIMIT 2,1 xác định n (LIMIT n, 1).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm hiểu cách sử dụng một số chức năng của MySQL và MariaDB - Phần 2

  2. CHỈ THAM GIA TRÁI hàng đầu tiên

  3. LIMIT từ khóa trên MySQL với câu lệnh chuẩn bị

  4. Lỗi trong MySQL khi đặt giá trị mặc định cho DATE hoặc DATETIME

  5. BẢNG DROP MySQL