假设你是一家电商公司的数据分析师,老板需要一份产品销售报告:
统计所有商品的销量
商品分为两类:标准商品(有固定规格)和定制单品(特殊订单)
数据来自不同的数据库表
需要处理可能存在的空值问题
这个看似简单的需求,实际上需要用到SQL中的三个核心功能:GROUP BY、UNION和COALESCE。
第一章:GROUP BY - 数据分组
什么是分组?为什么需要分组?
想象你是一个超市经理,面对满满一仓库的商品:
你需要知道每种商品的库存总量
而不是每个单独商品的库存
这就是分组的核心思想:将相似的数据归为一组,然后进行统计计算。
GROUP BY基础用法
-- 统计每个部门的员工数量
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department;
department | employee_count |
---|---|
技术部 | 15 |
销售部 | 20 |
财务部 | 8 |
GROUP BY进阶用法
-- 统计每个部门、每个职级的平均工资
SELECT
department,
job_level,
AVG(salary) AS avg_salary
FROM employees
GROUP BY department, job_level;
GROUP BY常见错误
-- 错误示例:SELECT包含了未在GROUP BY中的列
SELECT name, department, AVG(salary)
FROM employees
GROUP BY department; -- 错误!name不在GROUP BY中
黄金法则:SELECT中的非聚合列必须出现在GROUP BY子句中
第二章:UNION - 数据合并
UNION vs UNION ALL
假设你有两个客户名单:线上客户和线下客户
-- 合并客户列表(去重)
SELECT name, email FROM online_customers
UNION
SELECT name, email FROM offline_customers;
-- 合并客户列表(不去重)
SELECT name, email FROM online_customers
UNION ALL
SELECT name, email FROM offline_customers;
UNION使用规则
每个SELECT语句必须有相同数量的列
对应列必须有兼容的数据类型
列名可以不同,但最终结果使用第一个SELECT的列名
UNION实际应用场景
-- 合并销售数据:标准商品 + 定制单品
SELECT '标准商品' AS type, product_id, SUM(quantity) AS total_sales
FROM standard_orders
GROUP BY product_id
UNION ALL
SELECT '定制单品' AS type, custom_id, SUM(quantity) AS total_sales
FROM custom_orders
GROUP BY custom_id;
第三章:COALESCE - 空值处理
为什么需要处理空值?
在数据库中,NULL表示"未知"或"不存在"。但实际应用中:
NULL与0不同
NULL参与计算会导致结果变为NULL
用户界面显示NULL不友好
COALESCE基础用法
-- 返回第一个非空值
SELECT
name,
COALESCE(middle_name, '无') AS middle_name,
COALESCE(phone, email, '无联系方式') AS contact
FROM customers;
COALESCE高级技巧
-- 解决ID冲突问题
SELECT
COALESCE(standard_id, custom_id + 1000000) AS unified_id
FROM products;
-- 处理多种可能的空值情况
SELECT
product_id,
COALESCE(
special_price,
member_price,
regular_price * 0.9,
0
) AS final_price
FROM pricing;
结语:SQL三剑客的强大组合
通过本文的学习,你应该已经掌握:
GROUP BY:分组统计的核心工具
UNION:数据合并的桥梁
COALESCE:空值处理的瑞士军刀
这三个功能的组合可以解决实际工作中80%的复杂数据统计需求。记住:
"掌握基础工具的组合应用,比学习高级技巧更重要"
终极小抄:
场景 | 解决方案 |
---|---|
分类统计 | GROUP BY |
合并多源数据 | UNION ALL |
处理空值/默认值 | COALESCE |
解决ID冲突 | COALESCE + 偏移量 |
复杂数据汇总 | GROUP BY + UNION ALL + COALESCE |