Maison >base de données >tutoriel mysql >Comment puis-je utiliser ROW_NUMBER() dans une clause WHERE ?

Comment puis-je utiliser ROW_NUMBER() dans une clause WHERE ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-17 05:36:24149parcourir

How Can I Use ROW_NUMBER() in a WHERE Clause?

Utilisation de la fonction ROW_NUMBER() dans la clause WHERE : surmonter les restrictions des fonctions fenêtrées

Les fonctions fenêtrées, telles que ROW_NUMBER(), permettent d'obtenir des données puissantes transformations au sein des ensembles de résultats. Cependant, leur utilisation est soumise à des contraintes spécifiques, dont l'une est leur exclusion de la clause WHERE.

Comme l'illustre la requête rencontrée par l'utilisateur, tenter d'utiliser ROW_NUMBER() dans la clause WHERE entraîne le message d'erreur : "Les fonctions fenêtrées ne peuvent apparaître que dans les clauses SELECT ou ORDER BY."

Pour remédier à cette limitation, une technique peut être utilisée qui consiste à encapsuler la requête d'origine dans une table commune Expression (CTE), permettant l'inclusion de fonctions fenêtrées au sein de la requête CTE.

Voici comment implémenter cette solution :

  1. Créer un CTE : Encapsuler la requête d'origine dans un CTE, en attribuant un alias (par exemple, MyCte) à it.
  2. Incluez ROW_NUMBER() dans le CTE : Dans le CTE, incluez la fonction ROW_NUMBER() avec les autres colonnes souhaitées.
  3. Sélectionnez parmi les CTE : Interrogez le CTE pour le résultat souhaité, en utilisant les résultats ROW_NUMBER() dans WHERE

La requête révisée ressemblerait à ceci :

WITH MyCte AS
(
    SELECT employee_id,
            RowNum = ROW_NUMBER() OVER (ORDER BY employee_id)
    FROM V_EMPLOYEE
    ORDER BY Employee_ID
)
SELECT employee_id
FROM MyCte
WHERE RowNum > 0

En encapsulant la requête d'origine dans un CTE, la fonction fenêtrée ROW_NUMBER() peut désormais être utilisée dans le WHERE clause, permettant le filtrage des résultats en fonction de ses valeurs.

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