类别:

聚合函数 (通用)、窗口函数 (通用、窗口框架)

STDDEV_POP

返回非 NULL 值的总体标准差(方差的平方根)。

另请参阅 STDDEV,它返回样本标准差(方差的平方根)。

语法

聚合函数

STDDEV_POP( [ DISTINCT ] <expr1>)
Copy

窗口函数

STDDEV_POP( [ DISTINCT ] <expr1> ) OVER (
                                        [ PARTITION BY <expr2> ]
                                        [ ORDER BY <expr3> [ ASC | DESC ] [ <window_frame> ] ]
                                        )
Copy

有关 window_frame 语法的详细信息,请参阅 窗口框架语法和用法

实参

expr1

计算结果为数值的表达式。这是计算标准偏差的表达式。

expr2

这是用于划分分区的可选表达式。

expr3

这是每个分区中作为排序规则的可选表达式。

返回

返回值的数据类型是 DOUBLE。

如果组内的所有记录都是 NULL,则此函数返回 NULL。

使用说明

  • 传递 VARCHAR 表达式时,此函数会将输入隐式转换为浮点值。如果无法执行转换,则会返回错误。

  • 当此函数作为窗口函数调用且 OVER 子句包含 ORDER BY 子句时:

    • DISTINCT 关键字被禁止,并导致 SQL 编译错误。

    • 必须指定窗口框架。如果您未指定窗口框架,则使用隐式累积窗口框架:

      RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

    有关窗口框架的更多详细信息(包括语法和示例),请参阅 窗口框架语法和用法

    有关隐式窗口框架的更多信息,请参阅 窗口框架使用说明

聚合函数示例

以下示例计算少量整数的标准差:

CREATE TABLE t1 (c1 INTEGER);
INSERT INTO t1 (c1) VALUES
    (6),
   (10),
   (14)
   ;
SELECT STDDEV_POP(c1) FROM t1;
Copy
+----------------+
| STDDEV_POP(C1) |
|----------------|
|    3.265986375 |
+----------------+

请注意,函数 STDDEV 和 STDDEV_SAMP 返回不同于 STDDEV_POP 的结果。

以下示例假设您有一张名为 menu 的表,其中列出了咖啡馆中待售的食品项目。以下输出显示了表中属于 Dessert 类别的 6 行。其他类别也存在于其他行,例如 MainBeverage

+---------+--------------------+---------------+-------------------+----------------+
| 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 |
+---------+--------------------+---------------+-------------------+----------------+

要查找销售商品成本和售价的总体标准差(仅限 Dessert 行),请运行以下查询:

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;
Copy
+---------------+--------------+--------------+
| ITEM_CATEGORY |  STDDEV_COGS | STDDEV_PRICE |
|---------------+--------------+--------------|
| Dessert       | 0.9176131477 |  1.343709625 |
+---------------+--------------+--------------+

窗口函数示例

以下示例使用相同的 menu 表,但将 STDDEV_POP 函数作为窗口函数来运行。

窗口函数按 item_category 列对行进行分区。因此,对每个项目类别计算一次标准差,并在组内每行的结果中重复该值。在此示例中,必须按项目类别和销售商品成本对行进行分组。(请注意,该 6 个 Dessert 行现在组合为 5 行,因为其中两行具有相同的商品成本价值。)

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;
Copy
+---------------+-------------------+--------------+
| 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  |
...
语言: 中文