GaussDB SQL基本语法示例:CASE表达式详解
GaussDB SQL基本语法示例:CASE表达式详解
CASE表达式是SQL中实现条件逻辑的核心工具,能够在查询中动态生成字段值。本文将结合GaussDB特性,通过多个示例解析其用法。
一、CASE表达式基础结构
- 简单CASE(等值匹配)
SELECT
employee_id,
department,
CASE department
WHEN 'HR' THEN '人力资源部'
WHEN 'IT' THEN '信息技术部'
ELSE '其他部门'
END AS dept_cn
FROM employees;
- 搜索CASE(条件判断)
SELECT
product_name,
price,
CASE
WHEN price < 100 THEN '经济型'
WHEN price BETWEEN 100 AND 500 THEN '中端型'
ELSE '高端型'
END AS price_range
FROM products;
二、进阶应用场景
- 数据分类统计
SELECT
COUNT(*) AS total_orders,
CASE
WHEN order_status = 'SHIPPED' THEN '已发货'
WHEN order_status = 'PENDING' THEN '待处理'
ELSE '异常订单'
END AS order_state,
AVG(order_amount) AS avg_amount
FROM orders
GROUP BY
CASE
WHEN order_status = 'SHIPPED' THEN '已发货'
WHEN order_status = 'PENDING' THEN '待处理'
ELSE '异常订单'
END;
- 动态计算字段
SELECT
student_id,
math_score,
english_score,
CASE
WHEN math_score > 90 OR english_score > 90 THEN '特长生'
WHEN math_score + english_score > 180 THEN '优秀生'
ELSE '普通生'
END AS student_type
FROM exam_results;
三、特殊用法示例
- 结合聚合函数
SELECT
region,
SUM(CASE WHEN sales_channel = 'ONLINE' THEN revenue ELSE 0 END) AS online_sales,
SUM(CASE WHEN sales_channel = 'OFFLINE' THEN revenue ELSE 0 END) AS offline_sales
FROM sales
GROUP BY region;
- 多层嵌套CASE
SELECT
customer_id,
CASE
WHEN account_age < 18 THEN '未成年'
ELSE
CASE
WHEN annual_income < 50000 THEN '青年群体'
ELSE '成熟客户'
END
END AS customer_segment
FROM customer_profile;
四、使用注意事项
结果类型一致性:各分支返回值必须兼容数据类型
ELSE子句可选:默认返回NULL,建议显式处理未知情况
性能优化:复杂CASE逻辑可能影响执行计划,必要时可预计算
NULL处理:建议使用COALESCE处理潜在的空值输入
五、典型错误规避
错误示例:类型不匹配
SELECT CASE WHEN status=1 THEN 'Active' ELSE 0 END FROM users;
-- 正确写法
SELECT CASE WHEN status=1 THEN 'Active' ELSE 'Inactive' END FROM users;
通过合理运用CASE表达式,可实现复杂的数据逻辑处理。建议结合GaussDB的EXPLAIN工具分析执行计划,在保证功能的同时优化查询性能。更多实践案例可参考华为云GaussDB官方文档。