Database
 sql >> Base de données >  >> RDS >> Database

Tutoriel sur les données :Utilisation des fonctions de fenêtre

Que sont les fonctions de fenêtre ?

Les fonctions de fenêtre permettent aux utilisateurs d'effectuer des calculs sur des partitions (c'est-à-dire des sous-groupes ou des sections) d'un ensemble de résultats, généralement une table ou les résultats d'une autre requête. Contrairement aux fonctions d'agrégation traditionnelles, qui ne renvoient qu'une seule valeur pour chaque groupe défini dans la requête, les fonctions de fenêtre renvoient une seule valeur pour chaque ligne d'entrée.

En quoi les fonctions de fenêtre sont-elles utiles ?

Les fonctions de fenêtre augmentent l'efficacité et réduisent la complexité des requêtes qui analysent les partitions (fenêtres) d'un ensemble de données en offrant une alternative aux concepts SQL plus complexes, par ex. requêtes dérivées. Les cas d'utilisation courants incluent :

  • Classement des résultats dans une fenêtre spécifique (par exemple, classement par groupe)
  • Accéder aux données d'une autre ligne dans une fenêtre spécifique (par exemple, rapport d'une période à l'autre)
  • Agrégation dans une fenêtre spécifique (par exemple, totaux cumulés) :

Comment utiliser les fonctions de fenêtre

Les fonctions de fenêtre sont lancées avec le OVER clause, et sont configurés à l'aide de trois concepts :

  • partition de fenêtre (PARTITION BY ) - regroupe les lignes en partitions
  • ordre des fenêtres (ORDER BY ) - définit l'ordre ou la séquence des lignes dans chaque fenêtre
  • cadre de fenêtre (ROWS ) - définit la fenêtre en utilisant un décalage par rapport à la ligne spécifiée

Présentation de la syntaxe

function (expression) OVER
     ( [ PARTITION BY expression_list ]
       [ ORDER BY order_list ]
       [ ROWS frame_clause ])

Définitions

  • expression_list :liste d'expressions séparées par des virgules, généralement des noms de colonnes
  • order_list :liste d'expressions séparées par des virgules, généralement des noms de colonnes
  • frame_clause :définissez le décalage à l'aide de CURRENT ROW , _value_ PRECEDING , UNBOUNDED PRECEDING , _value_ FOLLOWING , UNBOUNDED FOLLOWING

Exemples

Classement :classement par groupe

SELECT
      campaign
    , month
    , total_cost
    , rank() OVER (PARTITION BY month ORDER BY month DESC, total_cost DESC) as "rank"
FROM Cost_by_Month
LIMIT 8

Ligne précédente :analyse période sur période

SELECT
      campaign
    , month
    , total_cost
    , LAG(total_cost, 1) OVER (ORDER BY campaign, month) as "previous total cost"
FROM Cost_by_Month
WHERE campaign = 'TV'
LIMIT 4

Agrégation dans une fenêtre :totaux cumulés

SELECT
    campaign, month, monthly_cost
  , sum(monthly_cost) OVER (PARTITION BY campaign ORDER BY month ROWS BETWEEN UNBOUNDED
    PRECEDING and CURRENT ROW) as "running cost total"
FROM Cost_by_Month

Liste de la documentation et des fonctions :

Veuillez noter que des différences subtiles d'utilisation et de syntaxe existent d'une base de données à l'autre. Pour obtenir des informations spécifiques à votre mise en œuvre, veuillez utiliser la documentation spécifique à la source fournie ci-dessous.

Postgres

  • Tutoriel
  • Fonctions

Redshift

  • Tutoriel
  • Fonctions

Oracle

  • Tutoriel

SQLServer

  • Tutoriel

BigQuery

  • Tutoriel