Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Fonction MEDIAN
Calcule la valeur médiane de la plage de valeurs. Les valeurs NULL
de la plage sont ignorées.
MEDIAN est une fonction de distribution inverse qui suppose un modèle de distribution continue.
MEDIAN est un cas particulier de PERCENTILE_CONT.
Syntaxe
MEDIAN(median_expression)
Arguments
- median_expression
-
Colonne cible ou expression sur laquelle la fonction opère.
Types de données
Le type de retour est déterminé par le type de données de median_expression. Le tableau suivant illustre le type de retour de chaque type de données median_expression.
Type d’entrée | Type de retour |
---|---|
INT2 , INT4 , INT8 , NUMERIC , DECIMAL |
DECIMAL |
FLOAT , DOUBLE |
DOUBLE |
DATE |
DATE |
TIMESTAMP |
TIMESTAMP |
TIMESTAMPTZ |
TIMESTAMPTZ |
Notes d’utilisation
Si l’argument median_expression est un type de données DECIMAL
défini avec la précision maximale de 38 chiffres, il est possible que MEDIAN renvoie un résultat inexact ou une erreur. Si la valeur de retour de la fonction MEDIAN dépasse 38 chiffres, le résultat est tronqué pour s’adapter, ce qui entraîne une perte de précision. Si, au cours de l’interpolation, un résultat intermédiaire dépasse la précision maximale, un dépassement de capacité numérique se produit et la fonction renvoie une erreur. Pour éviter ces conditions, nous vous recommandons d’utiliser un type de données avec une précision inférieure ou l’argument median_expression avec une précision inférieure.
Si une instruction inclut plusieurs appels à des fonctions d’agrégation basées sur le tri (LISTAGG, PERCENTILE_CONT, or MEDIAN), elles doivent toutes utiliser les mêmes valeurs ORDER BY. Notez que MEDIAN applique une clause order by implicite sur la valeur d’expression.
Par exemple, l’instruction suivante renvoie une erreur.
SELECT TOP 10 salesid, SUM(pricepaid),
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(pricepaid)
FROM sales
GROUP BY salesid, pricepaid;
An error occurred when executing the SQL command:
SELECT TOP 10 salesid, SUM(pricepaid),
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(pricepaid)
FROM sales
GROUP BY salesid, pricepaid;
ERROR: within group ORDER BY clauses for aggregate functions must be the same
L’instruction suivante s’exécute avec succès.
SELECT TOP 10 salesid, SUM(pricepaid),
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(salesid)
FROM sales
GROUP BY salesid, pricepaid;
Exemples
Les exemples suivants utilisent l’exemple de base de données TICKIT. Pour de plus amples informations, veuillez consulter Exemple de base de données.
L’exemple suivant montre que MEDIAN produit les mêmes résultats que PERCENTILE_CONT(0.5).
SELECT TOP 10 DISTINCT sellerid, qtysold,
PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY qtysold),
MEDIAN(qtysold)
FROM sales
GROUP BY sellerid, qtysold;
+----------+---------+-----------------+--------+
| sellerid | qtysold | percentile_cont | median |
+----------+---------+-----------------+--------+
| 2 | 2 | 2 | 2 |
| 26 | 1 | 1 | 1 |
| 33 | 1 | 1 | 1 |
| 38 | 1 | 1 | 1 |
| 43 | 1 | 1 | 1 |
| 48 | 2 | 2 | 2 |
| 48 | 3 | 3 | 3 |
| 77 | 4 | 4 | 4 |
| 85 | 4 | 4 | 4 |
| 95 | 2 | 2 | 2 |
+----------+---------+-----------------+--------+
L’exemple suivant permet de trouver la quantité médiane vendue pour chaque ID de vendeur.
SELECT sellerid,
MEDIAN(qtysold)
FROM sales
GROUP BY sellerid
ORDER BY sellerid
LIMIT 10;
+----------+--------+
| sellerid | median |
+----------+--------+
| 1 | 1.5 |
| 2 | 2 |
| 3 | 2 |
| 4 | 2 |
| 5 | 1 |
| 6 | 1 |
| 7 | 1.5 |
| 8 | 1 |
| 9 | 4 |
| 12 | 2 |
+----------+--------+
Pour vérifier les résultats de la requête précédente pour le premier ID de vendeur, utilisez l’exemple suivant.
SELECT qtysold
FROM sales
WHERE sellerid=1;
+---------+
| qtysold |
+---------+
| 2 |
| 1 |
+---------+