Maison  >  Article  >  base de données  >  Comment sélectionner les 3 premières lignes de chaque catégorie dans MySQL sans fonctions analytiques ?

Comment sélectionner les 3 premières lignes de chaque catégorie dans MySQL sans fonctions analytiques ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-27 23:23:30545parcourir

How to Select the Top 3 Rows from Each Category in MySQL Without Analytic Functions?

Sélection des 3 premières lignes de plusieurs catégories dans MySQL

La sélection des premières lignes de chaque catégorie dans un tableau peut être difficile. Une méthode utilisant des vues et des sous-requêtes, comme indiqué lors de la tentative initiale, peut renvoyer des résultats incorrects.

Une approche plus efficace utilise des fonctions analytiques, que MySQL ne prend pas en charge de manière native. Cependant, il est possible d'émuler ces fonctions à l'aide de variables. Voici comment :

<code class="sql">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;</code>

Cette requête initialise les variables @rownum et @category à l'aide d'une opération JOIN. Elle attribue ensuite un rang à chaque ligne en fonction de sa catégorie, en incrémentant le classement si la catégorie change.

Enfin, la requête sélectionne uniquement les lignes avec un rang de 3 ou moins. Notez que vous devrez peut-être modifier la clause SELECT x.* pour inclure uniquement les colonnes souhaitées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn