连接两个表,并获得条件计数,其中女性计数大于男性计数的部门名称

问题描述

我们有两个表,分别为deptemp

dept表具有2列:dept_iddept_name
emp表还具有2列:dept_idGender

我必须得到dept_name女性数量男性数量更多。

解决方法

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而不是使用依赖子查询进行重写,则可能会发现该表达式的运行速度更快。