Maison > base de données > tutoriel mysql > Comment sélectionner les deux meilleurs articles de chaque catégorie dans MySQL ?

Comment sélectionner les deux meilleurs articles de chaque catégorie dans MySQL ?

Mary-Kate Olsen
Libérer: 2024-10-29 12:02:02
original
637 Les gens l'ont consulté

How to Select the Top Two Articles from Each Category in MySQL?

Requête MySQL : sélection des deux meilleurs articles de chaque catégorie

Dans MySQL, il est souvent possible d'extraire un nombre spécifié de lignes d'une table en utilisant la clause LIMIT. Toutefois, lorsque l’exigence consiste à sélectionner plusieurs lignes en fonction du regroupement, une approche différente est nécessaire. Cet article traite d'un scénario spécifique dans lequel deux lignes doivent être sélectionnées dans chaque catégorie d'un tableau.

À l'origine, l'utilisateur tentait d'y parvenir en créant une vue pour limiter les lignes et en utilisant ensuite une sous-requête pour récupérer le résultat souhaité. enregistrements. Cependant, cette approche n'a abouti qu'à deux enregistrements au total.

La solution réside dans l'utilisation de ce que l'on appelle communément les fonctions de fenêtrage. MySQL ne prend pas en charge nativement les fonctions de fenêtrage, mais il est possible d'émuler leurs fonctionnalités à l'aide de variables définies par l'utilisateur comme suit :

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;
Copier après la connexion

Dans cette requête révisée :

  • La requête externe sélectionne les colonnes de la table TBL_ARTIKUJT (x.*).
  • La requête interne, entourée de parenthèses, calcule le classement de chaque ligne dans chaque catégorie. Il définit également deux variables définies par l'utilisateur, @rownum et @category, qui sont utilisées pour suivre le numéro de ligne et la catégorie actuels.
  • La clause WHERE filtre les résultats pour inclure uniquement les lignes avec un rang de 3 ou moins. .

Cette approche émule efficacement les fonctions de fenêtrage pour regrouper et sélectionner les lignes souhaitées dans chaque catégorie. Si l'intention est de récupérer uniquement les colonnes d'origine, la requête externe peut être modifiée pour spécifier des noms de colonnes spécifiques au lieu de x.*.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal