聚合函数选择

wen IT资讯 20

本文目录导读:

聚合函数选择

  1. 聚合函数类型
  2. 选择策略
  3. 实际案例
  4. 注意事项
  5. 选择决策树
  6. 最佳实践

我来详细解释聚合函数的选择方法和常见场景。

聚合函数类型

常用聚合函数

函数 作用 适用场景
COUNT() 计数 统计行数、非空值数量
SUM() 求和 数值字段累加
AVG() 平均值 计算数值字段均值
MAX() 最大值 找最大数值或最早日期
MIN() 最小值 找最小数值或最晚日期

特殊聚合函数

函数 作用 示例
GROUP_CONCAT() 字符串连接 MySQL: GROUP_CONCAT(name)
STRING_AGG() 字符串聚合 PostgreSQL: STRING_AGG(name, ',')
STDDEV() 标准差 计算数据离散程度
VARIANCE() 方差 计算数据变异程度
MEDIAN() 中位数 PostgreSQL支持
PERCENTILE_CONT() 百分位数 分布分析

选择策略

按数据类型选择

数值类型 → SUM, AVG, MAX, MIN, COUNT
日期类型 → MAX, MIN, COUNT
字符串类型 → COUNT, MAX, MIN, GROUP_CONCAT
布尔类型 → COUNT, SUM(转为1/0)

按分析目的选择

统计数量 → COUNT(*)
计算总额 → SUM(amount)
平均价格 → AVG(price)
最高/最低 → MAX/MIN
数据分布 → STDDEV, PERCENTILE

实际案例

场景1:电商订单分析

-- 统计订单情况
SELECT 
    customer_id,
    COUNT(order_id) AS order_count,      -- 订单数量
    SUM(amount) AS total_spent,          -- 总消费
    AVG(amount) AS avg_order_value,      -- 平均订单金额
    MAX(order_date) AS last_order,       -- 最近下单日期
    MIN(order_date) AS first_order       -- 首次下单日期
FROM orders
GROUP BY customer_id;

场景2:销售绩效分析

-- 销售人员绩效
SELECT 
    salesperson,
    COUNT(DISTINCT client_id) AS client_count,   -- 客户数
    SUM(revenue) AS total_revenue,               -- 总收入
    AVG(revenue) AS avg_deal_size,               -- 平均交易额
    MAX(revenue) AS biggest_deal,                -- 最大单笔
    MIN(revenue) AS smallest_deal                -- 最小单笔
FROM sales
WHERE year = 2024
GROUP BY salesperson;

注意事项

NULL值处理

-- COUNT 的不同表现
COUNT(*)        -- 包含NULL的行
COUNT(column)   -- 不包含NULL值
COUNT(DISTINCT) -- 去重后计数
-- 处理NULL值
AVG(COALESCE(salary, 0))  -- 将NULL转为0
MAX(IFNULL(score, 0))     -- MySQL语法

性能优化

-- 避免重复计算
SELECT 
    COUNT(*),
    SUM(amount),
    SUM(amount)/COUNT(*) AS avg  -- 而不是再用AVG
FROM table;
-- 使用索引
CREATE INDEX idx_salary ON employees(salary);
SELECT MAX(salary), MIN(salary) FROM employees;

组合使用技巧

-- 多层聚合
SELECT 
    department,
    AVG(salary) as avg_salary,
    AVG(salary) - STDDEV(salary) as low_range,
    AVG(salary) + STDDEV(salary) as high_range
FROM employees
GROUP BY department;

选择决策树

graph TD
    A[需要什么统计?] --> B{数值类型?}
    B -->|数字| C{统计目的?}
    B -->|日期| D{时间范围?}
    B -->|文本| E{需要计数?}
    C -->|总量| F[SUM]
    C -->|平均| G[AVG]
    C -->|极值| H[MAX/MIN]
    C -->|分布| I[STDDEV/VARIANCE]
    D -->|最早| J[MIN]
    D -->|最晚| K[MAX]
    E -->|总数| L[COUNT]
    E -->|连接| M[GROUP_CONCAT]

最佳实践

  1. 明确需求:先确定要分析什么指标
  2. 数据类型:确保函数适用于目标列
  3. 性能考虑:大数据量时避免HLL类型聚合
  4. 结果验证:检查聚合结果是否合理
  5. NULL处理:明确NULL值对结果的影响

选择原则:根据数据类型+分析目的+性能要求三者综合考虑选择合适的聚合函数。

抱歉,评论功能暂时关闭!