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

Truy vấn Sql - Giới hạn kết quả truy vấn

Sử dụng hai biến người dùng và đếm cùng một store_id liên tiếp, bạn có thể thay thế <= 5 với bất kỳ giới hạn nào bạn muốn

SELECT a.*
FROM (
 SELECT store_id, user_id, count(1) as visits 
 FROM shopping
 WHERE store_id IN (60,61,62,63,64,65,66)
 GROUP BY store_id, user_id
 ORDER BY store_id, visits desc, user_id
) a,
(SELECT @prev:=-1, @count:=1) b
WHERE
 CASE WHEN @prev<>a.store_id THEN
   CASE WHEN @prev:=a.store_id THEN
    @count:=1
   END
 ELSE
   @count:[email protected]+1
 END <= 5

Chỉnh sửa theo yêu cầu một số giải thích:

Truy vấn con đầu tiên (a) là truy vấn nhóm và sắp xếp dữ liệu để bạn có dữ liệu như:

store_id | user_id | visits
---------+---------+-------
 60           1       5
 60           2       3
 60           3       1
 61           2       4
 61           3       2

truy vấn con thứ hai (b) init biến người dùng @prev với -1 và @count với 1

sau đó chúng tôi chọn tất cả dữ liệu từ truy vấn con (a) xác minh điều kiện trong case .

  • xác minh rằng store_id trước đó (@prev ) chúng tôi đã thấy khác với store_id hiện tại. Kể từ @prev đầu tiên bằng -1, không có gì phù hợp với store_id hiện tại nên điều kiện <> là đúng, chúng tôi nhập sau đó là trường hợp thứ hai chỉ phục vụ để thay đổi giá trị @prev với store_id hiện tại. Đây là mẹo để tôi có thể thay đổi hai biến người dùng @count@prev trong cùng một điều kiện.

  • nếu store_id trước đó bằng @prev chỉ cần tăng @count biến.

  • chúng tôi kiểm tra xem số lượng có nằm trong giá trị mà chúng tôi muốn không vì vậy <= 5

Vì vậy, với dữ liệu thử nghiệm của chúng tôi,:

bước
step | @prev | @count | store_id | user_id | visits
-----+-------+--------+----------+---------+-------
  0      -1      1    
  1      60      1        60          1        5 
  2      60      2        60          2        3
  3      60      3        60          3        1
  4      61      1        61          2        4
  5      61      2        61          3        2   


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ... mysql2 / mysql2.so:[BUG] Lỗi phân đoạn ruby ​​2.0.0p247

  2. lỗi mysql 2005 - Máy chủ lưu trữ máy chủ MySQL không xác định 'localhost' (11001)

  3. mysql không thể chèn vì không có giá trị mặc định?

  4. PHP Kiểm tra NULL

  5. Giao dịch MySQL trên hai cơ sở dữ liệu trên các máy chủ khác nhau