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

Menggunakan LIMIT dalam GROUP BY untuk mendapatkan N hasil per grup?

Anda dapat menggunakan GROUP_CONCAT fungsi agregat untuk memasukkan semua tahun ke dalam satu kolom, dikelompokkan berdasarkan id dan dipesan berdasarkan rate :

SELECT   id, GROUP_CONCAT(year ORDER BY rate DESC) grouped_year
FROM     yourtable
GROUP BY id

Hasil:

-----------------------------------------------------------
|  ID | GROUPED_YEAR                                      |
-----------------------------------------------------------
| p01 | 2006,2003,2008,2001,2007,2009,2002,2004,2005,2000 |
| p02 | 2001,2004,2002,2003,2000,2006,2007                |
-----------------------------------------------------------

Dan kemudian Anda dapat menggunakan FIND_IN_SET , yang mengembalikan posisi argumen pertama di dalam argumen kedua, mis.

SELECT FIND_IN_SET('2006', '2006,2003,2008,2001,2007,2009,2002,2004,2005,2000');
1

SELECT FIND_IN_SET('2009', '2006,2003,2008,2001,2007,2009,2002,2004,2005,2000');
6

Menggunakan kombinasi GROUP_CONCAT dan FIND_IN_SET , dan memfilter menurut posisi yang dikembalikan oleh find_in_set, Anda kemudian dapat menggunakan kueri ini yang hanya mengembalikan 5 tahun pertama untuk setiap id:

SELECT
  yourtable.*
FROM
  yourtable INNER JOIN (
    SELECT
      id,
      GROUP_CONCAT(year ORDER BY rate DESC) grouped_year
    FROM
      yourtable
    GROUP BY id) group_max
  ON yourtable.id = group_max.id
     AND FIND_IN_SET(year, grouped_year) BETWEEN 1 AND 5
ORDER BY
  yourtable.id, yourtable.year DESC;

Silakan lihat biola di sini .

Harap perhatikan bahwa jika lebih dari satu baris dapat memiliki tarif yang sama, Anda harus mempertimbangkan untuk menggunakan GROUP_CONCAT(tarif DISTINCT ORDER BY rate) pada kolom tarif alih-alih kolom tahun.

Panjang maksimum string yang dikembalikan oleh GROUP_CONCAT terbatas, jadi ini berfungsi dengan baik jika Anda perlu memilih beberapa catatan untuk setiap grup.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tipe data terbaik untuk menyimpan nilai mata uang dalam database MySQL

  2. Python SQL – Cara menggunakan Database SQLite, MySQL, dan PostgreSQL dengan Python

  3. Cara Mengubah Kata Sandi Root MySQL atau MariaDB di Linux

  4. SQL membagi nilai menjadi beberapa baris

  5. Bagaimana Benchmark Kinerja MySQL Menggunakan SysBench