FirebirdSQL logo

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.

Exemples AVG

Example 1. En utilisant la fonction AVG
SELECT
  dept_no,
  AVG(salary)
FROM employee
GROUP BY dept_no
Voir aussi :

SELECT.