- Catégories :
Fonctions d’agrégation (Général) , Fonctions de la fenêtre (Général, Cadre de fenêtre)
STDDEV, STDDEV_SAMP¶
Renvoie l’écart-type de l’échantillon standard (racine carrée de la variance de l’échantillon) des valeurs non NULL. STDDEV et STDDEV_SAMP sont des alias de la même fonction.
Voir également STDDEV_POP, qui renvoie l’écart type de la population standard (racine carrée de la variance).
Syntaxe¶
Fonction d’agrégation
{ STDDEV | STDDEV_SAMP } ( [ DISTINCT ] <expr1> )
Fonction de fenêtre
{ STDDEV | STDDEV_SAMP } ( [ DISTINCT ] <expr1> ) OVER (
[ PARTITION BY <expr2> ]
[ ORDER BY <expr3> [ ASC | DESC ] [ <window_frame> ] ]
)
Pour plus d’informations sur la syntaxe window_frame
, voir Syntaxe et utilisation du cadre de fenêtre .
Arguments¶
expr1
Une expression qui est évaluée à une valeur numérique. Il s’agit de l’expression sur laquelle est calculé l’écart-type.
expr2
C’est l’expression facultative à partir de laquelle effectuer la partition.
expr3
C’est l’expression facultative à partir de laquelle effectuer le classement dans chaque partition.
Renvoie¶
Le type de données de la valeur renvoyée est DOUBLE.
Si tous les enregistrements d’un groupe sont NULL, cette fonction renvoie NULL.
Notes sur l’utilisation¶
Pour les entrées à enregistrement unique, STDDEV et STDDEV_SAMP renvoient tous deux NULL. Cela est différent du comportement Oracle, où STDDEV_SAMP renvoie NULL pour un seul enregistrement et STDDEV renvoie 0.
Lorsqu’elle est transmise à une expression VARCHAR, cette fonction convertit implicitement l’entrée en valeurs à virgule flottante. Si la conversion ne peut pas être effectuée, une erreur est renvoyée.
Lorsque cette fonction est appelée en tant que fonction de fenêtre et que la clause OVER contient une clause ORDER BY :
Le mot-clé DISTINCT est interdit et entraîne une erreur de compilation SQL.
Un cadre de fenêtre doit être spécifié. Si vous ne spécifiez pas de cadre de fenêtre, un cadre de fenêtre cumulatif implicite est utilisé :
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
Pour plus d’informations sur les cadres de fenêtre, y compris la syntaxe et des exemples, voir Syntaxe et utilisation du cadre de fenêtre.
Pour plus d’informations sur les cadres de fenêtre implicites, voir Notes sur l’utilisation du cadre de fenêtre.
Exemples de fonctions d’agrégation¶
L’exemple suivant calcule l’écart type d’un petit échantillon de nombres entiers :
CREATE TABLE t1 (c1 INTEGER); INSERT INTO t1 (c1) VALUES (6), (10), (14) ; SELECT STDDEV(c1) FROM t1;+----------+ | STDDEV() | |----------| | 4 | +----------+
Notez que la fonction STDDEV_SAMP renvoie le même résultat :
SELECT STDDEV_SAMP(c1) FROM t1;+-----------------+ | STDDEV_SAMP(C1) | |-----------------| | 4 | +-----------------+
L’exemple suivant utilise une petite table nommée menu_items
, qui répertorie les articles mis en vente par un camion de restauration. Si vous souhaitez créer et charger cette table, voir Créer et charger la table menu_items.
Pour trouver l’écart type de l’échantillon pour le coût des marchandises vendues (COGS) et le prix de vente pour les lignes Dessert
, exécutez cette requête :
SELECT menu_category, STDDEV(menu_cogs_usd) stddev_cogs, STDDEV(menu_price_usd) stddev_price FROM menu_items WHERE menu_category='Dessert' GROUP BY 1;+---------------+-------------+--------------+ | MENU_CATEGORY | STDDEV_COGS | STDDEV_PRICE | |---------------+-------------+--------------| | Dessert | 1.00519484 | 1.471960144 | +---------------+-------------+--------------+
Exemple de fonction de fenêtre¶
L’exemple suivant utilise également la table menu_items
(voir Créer et charger la table menu_items), mais appelle la fonction STDDEV en tant que fonction de fenêtre.
La fonction de fenêtre sépare les lignes en fonction de la colonne menu_category
. Par conséquent, l’écart type est calculé une fois pour chaque catégorie et cette valeur est répétée dans le résultat pour chaque ligne du groupe. Dans cet exemple, les lignes doivent être regroupées à la fois par catégorie de menu et par coût des marchandises vendues.
SELECT menu_category, menu_cogs_usd, STDDEV(menu_cogs_usd) OVER(PARTITION BY menu_category) stddev_cogs FROM menu_items GROUP BY 1,2 ORDER BY menu_category;
La sortie suivante est un jeu de résultats partiels pour cette requête (les premières 15 lignes) :
+---------------+---------------+--------------+ | MENU_CATEGORY | MENU_COGS_USD | STDDEV_COGS | |---------------+---------------+--------------| | Beverage | 0.50 | 0.1258305738 | | Beverage | 0.65 | 0.1258305738 | | Beverage | 0.75 | 0.1258305738 | | Dessert | 1.25 | 1.054751155 | | Dessert | 3.00 | 1.054751155 | | Dessert | 1.00 | 1.054751155 | | Dessert | 2.50 | 1.054751155 | | Dessert | 0.50 | 1.054751155 | | Main | 4.50 | 3.444051572 | | Main | 2.40 | 3.444051572 | | Main | 1.50 | 3.444051572 | | Main | 11.00 | 3.444051572 | | Main | 8.00 | 3.444051572 | | Main | NULL | 3.444051572 | | Main | 12.00 | 3.444051572 | ...