MySQL et fonctions de fenêtre


30

Il semble que MySQLcela ne prenne pas en charge les fonctions de fenêtre.
Par exemple, le simple: COUNT(*) OVER() AS cntne fonctionne pas.
Ce que je ne sais pas, c'est si cela s'applique également à la version commerciale (je suppose que la version communautaire est un sous-ensemble limité).
Sinon, comment contourner cette fonctionnalité manquante?


3
L'édition communautaire de MySQL Server n'est pas un sous-ensemble limité dans un sens significatif. Les différences concernent les modules complémentaires et les plugins qui n'affectent pas les fonctionnalités de base.
Michael - sqlbot

Jetez un œil à cette solution ici et ici
StuartLC

En fait, MySQL9 le prend en charge. J'ai utilisé des pandas à la place, ce qui est nul.
Andrew Scott Evans

1
MySQL 8 prend en charge la fonction de fenêtre. Pour référence: dev.mysql.com/doc/refman/8.0/en/window-functions.html
gvgvgvijayan

MySQL prend en charge les fonctions de fenêtre depuis la version 8.0. Ce lien pourrait vous aider.
Hamid Mohayeji

Réponses:


36

MySQL ne prend pas en charge les fonctions de fenêtre (*). Il y a ce que nous appelons "la fonction de fenêtre d'un pauvre" sous la forme de GROUP_CONCAT () .

Il existe de nombreuses astuces GROUP_CONCATpour émuler les fonctions de la fenêtre. Ils ne sont pas aussi jolis (syntaxiquement) et sont parfois trop limités. J'en ai écrit quelques-uns. Voir mon article de blog se plaignant des fonctions de fenêtre manquantes et des liens vers diverses solutions basées sur GROUP_CONCAT.

En particulier, Sélection d'une donnée de colonne non agrégée spécifique dans GROUP BY et SQL: sélection des N premiers enregistrements par groupe, une autre solution pourrait vous intéresser et pourrait vous donner un coup de pouce.

Choses à noter sur GROUP_CONCAT():

  • Peut utiliser DISTINCT
  • Peut utiliser ORDER BY ... ASC/DESC
  • Peut définir SEPARATOR
  • Comme toute fonction d'agrégation - elle rejette les valeurs NULL; plein d'astuces là-dessus.

(*) La prise en charge des fonctions de fenêtre a été ajoutée dans MySQL 8


MySQL prend en charge les fonctions de fenêtre à partir de la version 8
Max

GROUP_CONCAT n'est pas une fonction de fenêtre, c'est une fonction d'ensemble ordonnée.
SQLRaptor

1
@SQLRaptor personne ne l'a prétendu.
ypercubeᵀᴹ

11

Il faut vraiment noter que MariaDB 10.2 (sortie en mai 2017) a des fonctions de fenêtre . C'est certainement une avenue à suivre si vous avez besoin de MySQL et des fonctions de fenêtre.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.