sql >> Database teknologi >  >> RDS >> Mysql

MySql-forespørgsel:Vælg top 3 rækker fra tabellen for hver kategori

LIMIT stopper kun antallet af resultater, som erklæringen returnerer. Det, du leder efter, kaldes generelt analytiske/vindues-/rangeringsfunktioner - som MySQL ikke understøtter, men du kan efterligne ved hjælp af variabler:

SELECT x.*
  FROM (SELECT t.*,
               CASE 
                 WHEN @category != t.category THEN @rownum := 1 
                 ELSE @rownum := @rownum + 1 
               END AS rank,
               @category := t.category AS var_category
          FROM TBL_ARTIKUJT t
          JOIN (SELECT @rownum := NULL, @category := '') r
      ORDER BY t.category) x
 WHERE x.rank <= 3

Hvis du ikke ændrer SELECT x.* , vil resultatsættet inkludere rank og var_category værdier - du bliver nødt til at angive de kolonner, du virkelig ønsker, hvis dette ikke er tilfældet.



  1. Atomic Increment med Entity Framework

  2. Lær funktionerne og funktionerne i MariaDB SkySQL at kende

  3. Opsummer data i en ny tabel

  4. Forskellen mellem disse to sammenføjningstabeller?