- Catégories :
Fonctions d’agrégation (Général) , Fonctions de la fenêtre (Général, Cadre de fenêtre)
STDDEV_POP¶
Retourne l’écart-type de la population standard (racine carrée de la variance) des valeurs non NULL.
Voir aussi STDDEV, qui renvoie l’écart type de l’échantillon (racine carrée de la variance).
Syntaxe¶
Fonction d’agrégation
STDDEV_POP( [ DISTINCT ] <expr1>)
Fonction de fenêtre
STDDEV_POP( [ 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¶
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 pour une petite population d’entiers :
CREATE TABLE t1 (c1 INTEGER); INSERT INTO t1 (c1) VALUES (6), (10), (14) ; SELECT STDDEV_POP(c1) FROM t1;+----------------+ | STDDEV_POP(C1) | |----------------| | 3.265986375 | +----------------+
Notez que les fonctions STDDEV et STDDEV_SAMP ne renvoient pas le même résultat que STDDEV_POP.
L’exemple suivant suppose que vous disposez d’une table nommée menu
qui répertorie les produits alimentaires en vente dans un café. La sortie suivante montre les six lignes de la table qui appartiennent à la catégorie Dessert
. D’autres lignes existent également pour d’autres catégories, telles que Main
et Beverage
.
+---------+--------------------+---------------+-------------------+----------------+ | MENU_ID | MENU_ITEM_NAME | ITEM_CATEGORY | COST_OF_GOODS_USD | SALE_PRICE_USD | |---------+--------------------+---------------+-------------------+----------------| | 10002 | Sugar Cone | Dessert | 2.5000 | 6.0000 | | 10003 | Waffle Cone | Dessert | 2.5000 | 6.0000 | | 10004 | Two Scoop Bowl | Dessert | 3.0000 | 7.0000 | | 10008 | Ice Cream Sandwich | Dessert | 1.0000 | 4.0000 | | 10009 | Mango Sticky Rice | Dessert | 1.2500 | 5.0000 | | 10010 | Popsicle | Dessert | 0.5000 | 3.0000 | +---------+--------------------+---------------+-------------------+----------------+
Pour trouver l’écart type de la population pour le coût des marchandises vendues et le prix de vente (pour les lignes Dessert
uniquement), exécutez cette requête :
SELECT item_category, STDDEV_POP(cost_of_goods_usd) stddev_cogs, STDDEV_POP(sale_price_usd) stddev_price FROM menu WHERE item_category='Dessert' GROUP BY 1;+---------------+--------------+--------------+ | ITEM_CATEGORY | STDDEV_COGS | STDDEV_PRICE | |---------------+--------------+--------------| | Dessert | 0.9176131477 | 1.343709625 | +---------------+--------------+--------------+
Exemple de fonction de fenêtre¶
L’exemple suivant utilise la même table menu
mais exécute la fonction STDDEV_POP en tant que fonction de fenêtre.
La fonction de fenêtre sépare les lignes en fonction de la colonne item_category
. Par conséquent, l’écart type est calculé une fois pour chaque catégorie d’éléments 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 d’articles et par coût des marchandises vendues. (Il convient de noter que les six lignes Dessert
sont désormais regroupées en cinq lignes, car deux lignes ont la même valeur de coût des marchandises).
SELECT item_category, cost_of_goods_usd, STDDEV_POP(cost_of_goods_usd) OVER(PARTITION BY item_category) stddev_cogs FROM menu GROUP BY 1,2 ORDER BY item_category;+---------------+-------------------+--------------+ | ITEM_CATEGORY | COST_OF_GOODS_USD | STDDEV_COGS | |---------------+-------------------+--------------| | Beverage | 0.5000 | 0.1027402334 | | Beverage | 0.7500 | 0.1027402334 | | Beverage | 0.6500 | 0.1027402334 | | Dessert | 2.5000 | 0.9433981132 | | Dessert | 3.0000 | 0.9433981132 | | Dessert | 1.0000 | 0.9433981132 | | Dessert | 0.5000 | 0.9433981132 | | Dessert | 1.2500 | 0.9433981132 | | Main | 4.5000 | 3.352193642 | | Main | 8.0000 | 3.352193642 | | Main | 2.0000 | 3.352193642 | | Main | 3.5000 | 3.352193642 | ...