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

Đặt trước câu lệnh GROUP BY

Trong MySQL, cách an toàn nhất để thực hiện việc này có thể liên quan đến các biến:

select im.*
from (select im.*,
             (@rn := if(@p = platform_type_id, @rn + 1,
                        if(@p := platform_type_id, 1, 1)
                       )
             ) as rn
      from main_itemmaster im cross join
           (select @rn := 0, @p := '') params
      order by platform_type_id, (territory_id = 'US') desc
     ) im
where rn = 1;

Điều này không liên quan đến việc sử dụng tính năng MySQL (mis) cho phép các cột trong SELECT của một truy vấn tổng hợp không được tổng hợp và không nằm trong GROUP BY .

Tại đây là một SQL Fiddle cho thấy nó đang hoạt động.

CHỈNH SỬA:

Về chủ đề của thứ tự đánh giá các biến. Từ tài liệu :

Về mặt kỹ thuật, đoạn mã trên đọc biến trong cùng một câu lệnh , nhưng nó cũng nằm trong cùng một biểu thức . Ngữ nghĩa của if() (và case mà đôi khi tôi cũng sử dụng) đảm bảo thứ tự đánh giá các biểu thức.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi chuỗi DateTime trong Python thành số nguyên mili giây

  2. sử dụng IFNULL trong laravel

  3. Có thể cho ứng dụng PHP được xây dựng trên bộ mã hóa để kết nối với cơ sở dữ liệu MySQL VÀ mongoDB cùng một lúc không?

  4. Tự động cập nhật bảng mysql hai mươi bốn giờ một lần

  5. Danh sách SELECT không nằm trong mệnh đề GROUP BY và chứa cột không được tổng hợp .... không tương thích với sql_mode =only_full_group_by