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?

Cratyle
la source
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

Shlomi Noach
la source
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.

chx
la source