Maison > base de données > tutoriel mysql > Comment sélectionner efficacement les premières lignes par catégorie dans MySQL sans fonctions analytiques ?

Comment sélectionner efficacement les premières lignes par catégorie dans MySQL sans fonctions analytiques ?

DDD
Libérer: 2024-10-28 19:05:29
original
193 Les gens l'ont consulté

How to Efficiently Select Top Rows per Category in MySQL Without Analytic Functions?

Sélection des premières lignes par catégorie dans MySQL

Pour récupérer un nombre limité de lignes de chaque catégorie dans un tableau, vous pouvez utiliser des fonctions analytiques . Cependant, MySQL ne propose pas directement ces fonctions. Néanmoins, il est possible de les émuler à l'aide de variables.

Émulation de fonctions analytiques

La requête MySQL suivante émule la fonctionnalité des fonctions analytiques pour sélectionner les 3 premières lignes de chaque catégorie. :

<code class="mysql">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>
Copier après la connexion

Explication

  • La sous-requête sélectionne toutes les lignes de la table TBL_ARTIKUJT et initialise deux variables de session, @rownum et @category, pour suivre le classement et catégorie actuels.
  • le rang attribué à chaque ligne indique sa position dans sa catégorie. Lorsqu'une nouvelle catégorie est rencontrée, le classement est réinitialisé à 1.
  • var_category est utilisé pour stocker la catégorie pour chaque ligne.
  • L'instruction SELECT externe filtre la sous-requête, en sélectionnant uniquement les lignes avec un classement. inférieur ou égal à 3.

Cette méthode vous permet d'implémenter la fonctionnalité souhaitée sans recourir à des fonctions analytiques, qui ne sont pas prises en charge par MySQL.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal