答案:通过组合SUBSTRING、CASE等函数可提取并分类邮箱域名;利用SUM+CASE实现分组内条件统计;结合DATE_TRUNC与RANK函数找出每月销售额前3的员工。
SQL 函数组合使用能解决很多复杂的数据处理问题。关键在于理解每个函数的作用,并合理嵌套或配合 WHERE、GROUP BY、窗口函数等结构来实现目标。下面通过几个典型场景说明常用函数如何协同工作。
1. 字符串处理与条件判断结合
当需要根据字段内容提取信息并分类时,可以组合 SUBSTRING、CASE 和 LIKE 等函数。
例如:从用户邮箱中提取域名,并按公司类型分类:
- SUBSTRING(email, POSITION('@' IN email) + 1) AS domain —— 提取 @ 后的域名
- CASE WHEN domain IN ('gmail.com', 'outlook.com') THEN '个人邮箱'
- WHEN domain LIKE '%.edu%' THEN '教育机构'
- ELSE '企业邮箱' END —— 分类逻辑
这类组合适合清洗数据或生成报表维度。
2. 聚合函数 + 条件统计
用 COUNT、SUM 配合 CASE 可实现分组内的条件计数或求和。
比如统计订单表中各地区“高价值客户”(订单金额 > 500)的数量:
- SELECT region,
- SUM(CASE WHEN amount > 500 THEN 1 ELSE 0 END) AS high_value_count
- FROM orders GROUP BY region;
这种写法避免了多次查询,提升效率。
3. 时间函数与窗口函数联动
分析趋势时常需将 DATE_TRUNC 或 EXTRACT 与 ROW_NUMBER、RANK 结合。
示例:找出每月销售额排名前3的员工:
- WITH monthly_sales AS (
- SELECT emp_id, DATE_TRUNC('month', sale_date) AS month,
- SUM(amount) AS total
- )
- , ranked AS (
- SELECT emp_id, month, total,
- RANK() OVER (PARTITION BY month ORDER BY total DESC) AS rk
- FROM monthly_sales
- )
- SELECT * FROM ranked WHERE rk
这里时间截断+分组排序,精准定位关键人员。
4. 类型转换与空值处理配合
数据来源多样时,常需 COALESCE、NULLIF 和 CAST 协同工作。
例如统一价格字段,排除无效值并转为标准类型:
- CAST(COALESCE(NULLIF(price_str, ''), '0') AS DECIMAL) AS price_num
先用 NULLIF 把空字符串转为 NULL,再用 COALESCE 替换为默认值,最后转数字类型,确保后续计算安全。
基本上就这些套路。掌握函数组合的核心是理清逻辑顺序,先拆解需求步骤,再逐层用函数实现。实际应用中多借助 CTE 或子查询分步处理,代码更清晰也易调试。