Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête MySql :sélectionnez les 3 premières lignes du tableau pour chaque catégorie

LIMIT n'arrête que le nombre de résultats renvoyés par l'instruction. Ce que vous recherchez est généralement appelé fonctions analytiques/fenêtrage/classement - que MySQL ne prend pas en charge mais que vous pouvez émuler à l'aide de variables :

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

Si vous ne modifiez pas SELECT x.* , le jeu de résultats inclura le rank et var_category valeurs - vous devrez spécifier les colonnes que vous voulez vraiment si ce n'est pas le cas.