Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Sql Query - Membatasi hasil kueri

Menggunakan dua variabel pengguna dan menghitung store_id yang sama berturut-turut, Anda dapat mengganti <= 5 dengan batasan apa pun yang Anda inginkan

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

Edit sesuai permintaan beberapa penjelasan :

Subquery pertama (a) adalah subquery yang mengelompokkan dan mengurutkan data sehingga Anda akan memiliki data seperti:

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

subquery kedua (b) init variabel pengguna @prev dengan -1 dan @count dengan 1

kemudian kita memilih semua data dari subquery (a) memverifikasi kondisi di case .

  • verifikasi bahwa store_id sebelumnya (@prev ) yang kita lihat berbeda dari store_id saat ini. Sejak @prev pertama sama dengan -1 tidak ada yang cocok dengan store_id saat ini sehingga kondisinya <> benar kita masukkan maka adalah kasus kedua yang hanya berfungsi untuk mengubah nilai @prev dengan store_id saat ini. Ini triknya biar bisa ganti 2 variabel user @count dan @prev dalam kondisi yang sama.

  • jika store_id sebelumnya sama dengan @prev cukup tambahkan @count variabel.

  • kami memeriksa bahwa hitungannya berada dalam nilai yang kami inginkan sehingga <= 5

Jadi dengan data pengujian kami:

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. Pembaruan MySQL menggunakan PDO dan pernyataan yang disiapkan tidak berfungsi

  2. Apa yang setara dengan sqlite dari MySQL's INTERVAL dan UTC_TIMESTAMP?

  3. Kesalahan sintaks pembatas MySQL

  4. MySQL-Cluster gagal memulai

  5. Tampilkan (Daftar) Database MySQL di Linux melalui Command Line