FirebirdSQL logo

Les fonctions agrégées effectuent un calcul sur un ensemble de valeurs et renvoient une seule valeur.

Les fonctions d’agrégation, à l’exception de COUNT, ne prennent pas en compte les valeurs NULL.Les fonctions agrégées sont souvent utilisées avec la clause GROUP BY.

Les fonctions agrégées ne peuvent être utilisées comme expressions que dans les cas suivants :

  • SELECT liste de sélection des instructions (requête imbriquée ou externe) ;

  • Avoir une clause.

Syntaxe des fonctions d’agrégation
<aggregate_function> ::=
  aggragate_function ([ALL | DISTINCT] <expr>)
  [FILTER (WHERE <condition>)]

Les fonctions agrégées peuvent également être utilisées comme fonctions de fenêtre avec la clause OVER (). Voir Window (Analytique) Functions pour plus de détails.

Fonction FILTER

La clause FILTER étend les fonctions d’agrégation avec la clause optionnelle WHERE.Si la clause FILTER est utilisée, le résultat de l’agrégat est construit uniquement à partir des chaînes qui satisfont également la condition dans la clause optionnelle WHERE.

En général, une clause de filtrage peut être implémentée en utilisant une clause CASE dans une fonction d’agrégation : la condition de filtrage doit être placée dans la clause WHEN, la valeur à agréger dans la clause THEN.Étant donné que les fonctions d’agrégation ignorent généralement les valeurs NULL, la clause implicite ELSE NULL est suffisante pour ignorer les chaînes de caractères qui ne correspondent pas aux conditions du filtre.Les deux expressions suivantes sont équivalentes :

SUM(<expression>) FILTER(WHERE <condition>)

et

SUM(CASE WHEN <condition> THEN <expression> END)

Pour COUNT(*), cet exemple est différent car l’expression * ne peut pas être utilisée dans une clause THEN. A la place, toute valeur constante non égale à NULL est normalement utilisée.

COUNT(*) FILTER(WHERE <condition>)

et

SUM(CASE WHEN <condition> THEN 1 END)
Exemples FILTER
Example 1. Utilisation de la clause FILTER
SELECT
  invoice_year,
  SUM(revenue) FILTER (WHERE invoice_month = 1) AS jan_revenue,
  SUM(revenue) FILTER (WHERE invoice_month= 2) AS feb_revenue,
  ...
  SUM(revenue) FILTER (WHERE invoice_month = 12) AS dec_revenue
FROM (
  SELECT
    EXTRACT(YEAR FROM invoices.invoice_date) AS invoice_year,
    EXTRACT(MONTH FROM invoices.invoice_date) AS invoice_month,
    invoices.revenue AS revenue
  FROM invoices
)
GROUP BY invoice_year

Principales fonctions de l’agrégat

AVG()

Disponible en

DSQL

Syntaxe
AVG([ALL | DISTINCT] <expr>)
Table 1. paramètres de fonction AVG
Paramètre Description

expr

Expression : peut contenir une colonne de table, une constante, une variable, une expression, une fonction non agrégée ou une UDR qui renvoie un type de données numériques. Les fonctions agrégées ne sont pas autorisées comme expression.

Type de résultat de retour

DOUBLE PRECISION, DECFLOAT ou un entier mis à l’échelle (INTEGER, BIGINT ou INT128) selon le type d’argument de la fonction expr.

La fonction AVG renvoie la valeur moyenne du groupe.Les valeurs NULL sont ignorées.

  • Le paramètre ALL (par défaut) applique la fonction d’agrégation à toutes les valeurs.

  • Le paramètre DISTINCT indique que la fonction AVG ne sera exécutée que pour une seule instance de chaque valeur unique, quel que soit le nombre de fois où cette valeur apparaît.

  • Dans le cas où la sélection d’enregistrements est vide ou ne contient que des valeurs NULL, le résultat contiendra NULL.