问题描述
我们有两个表,分别为dept
和emp
。
dept
表具有2列:dept_id
和dept_name
。emp
表还具有2列:dept_id
和Gender
。
解决方法
SELECT dept_name FROM
(
SELECT D.dept_name,SUM(CASE WHEN E.Gender = 'Female' THEN 1 ELSE 0 END) FeMaleCount,SUM(CASE WHEN E.Gender = 'Male' THEN 1 ELSE 0 END) MaleCount
FROM Dept D JOIN EMP E ON E.dept_id = D.dept_id
GROUP BY D.dept_name
) X WHERE X.FeMaleCount > X.MaleCount
CASE表达式具有两种格式:
- 简单的CASE表达式将一个表达式与一组简单的表达式进行比较以确定结果。
- 搜索到的CASE表达式将评估一组布尔表达式以确定结果。
您需要搜索的CASE表达式语法:
CASE
WHEN Boolean_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
作为一个副要说明,如果性能是一个问题,那么如果您使用JOIN和GROUP BY而不是使用依赖子查询进行重写,则可能会发现该表达式的运行速度更快。