中级聚合函数

Snowflake 中的数据管道自动化

Emily Melhuish

Technical Curriculum Developer, Snowflake

运算顺序

运算顺序.png

SQL 的执行顺序与书写顺序不同

  1. 行:构建数据集
  2. 分组:汇总
  3. 结果:整理输出
1 * Snowflake 学习资料
Snowflake 中的数据管道自动化

常用聚合函数

  • COUNT(*) / COUNT(DISTINCT col) —— 总行数;唯一值数
  • SUM —— 列总和
  • AVG —— 平均值
  • MIN / MAX —— 范围
SELECT COUNT(*) AS total_shipments,
       COUNT(DISTINCT carrier_id) AS unique_carriers,
       SUM(delivery_days) AS total_days,
       AVG(delivery_days) AS avg_days
FROM shipments;
Snowflake 中的数据管道自动化

多条查询的问题

按区域与仓库返回用量

SELECT 
region
, warehouse_name
, SUM(credits_used) 
FROM usage 
GROUP BY region, warehouse_name; 

按区域返回小计

SELECT region
, SUM(credits_used) 
FROM usage GROUP BY region; 

返回总用量

SELECT 
SUM(credits_used) 
FROM usage;
Snowflake 中的数据管道自动化

GROUPING SETS

输入

SELECT region
, warehouse_name
, SUM(credits_used) AS total 
FROM usage 
GROUP BY GROUPING SETS ( 
  (region, warehouse_name)
  , (region)
  , () 
);

输出

REGION WAREHOUSE_NAME TOTAL
EMEA harbr_wh_prod 1240.50
EMEA harbr_wh_dev 380.00
EMEA NULL 1620.50
APAC harbr_wh_prod 890.25
APAC NULL 890.25
NULL NULL 2510.75
  • 注意:通过 CASE 语句为 NULL 增加含义
Snowflake 中的数据管道自动化

ROLLUP

输入

SELECT 
region
, warehouse_name
, SUM(credits_used) AS total 
FROM usage 
GROUP BY ROLLUP (region, warehouse_name);

输出

REGION WAREHOUSE_NAME TOTAL
EMEA harbr_wh_prod 1240.50
EMEA harbr_wh_dev 380.00
EMEA NULL 1620.50
APAC harbr_wh_prod 890.25
APAC NULL 890.25
NULL NULL 2510.75
Snowflake 中的数据管道自动化

CUBE

输入

SELECT 
region
, warehouse_name
, SUM(credits_used) AS total
FROM usage 
GROUP BY CUBE (region, warehouse_name);

输出

REGION WAREHOUSE_NAME TOTAL
EMEA harbr_wh_prod 1240.50
EMEA harbr_wh_dev 380.00
EMEA NULL 1620.50
APAC harbr_wh_prod 890.25
APAC NULL 890.25 }
NULL harbr_wh_prod 2130.75
NULL harbr_wh_dev 380.00
NULL NULL 2510.75
Snowflake 中的数据管道自动化

GROUPING() 与 GROUPING_ID()

SELECT region, warehouse_name, SUM(credits_used) AS total_credits, GROUPING(region) AS is_region_agg, GROUPING(warehouse_name) AS is_wh_agg , 
GROUPING_ID(region, warehouse_name) AS grouping_level 
FROM usage 
GROUP BY ROLLUP (region, warehouse_name);

Markdown 表格输出的截图

Snowflake 中的数据管道自动化

Vamos praticar!

Snowflake 中的数据管道自动化

Preparing Video For Download...