1

我有一个表格,其中包含学生的姓名、电子邮件、职位等,以及他们的“状态”(可以是 Y 或 N 之一。)我想编写一个查询来计算每种职位的数量,以及使用 JOIN 的每种类型内的 Y 的数量和 N 的数量。(也就是说,这将是一个包含三列的表:Position、StatusIsYes 和 StatusIsNo。)

我已经通过以下方式使用 CASE 子句完成了此操作,但我无法弄清楚如何使用 JOIN 子句来执行此操作。

SELECT position,
COUNT(CASE WHEN status = 'Y' THEN 1 ELSE NULL END) AS StatusIsYes,
COUNT(CASE WHEN status = 'N' THEN 1 ELSE NULL END) AS StatusIsNo
 FROM 
students GROUP BY crd

我很感激任何建议!

编辑:我知道它可以在使用 JOIN 的情况下完成,但我想知道如何使用 JOIN完成。

4

3 回答 3

2

您不需要加入:

SELECT
    position,
    SUM(status = 'Y') AS StatusIsYes,
    SUM(status = 'N') AS StatusIsNo
FROM students
GROUP BY position

注意 的相当时髦的分配CASE,因为在 mysql 中(仅)trueis1falseis 0,所以sum()一个条件计算它有多少次是真的:)

于 2013-01-11T14:08:43.097 回答
1

尝试 ::

SELECT 
position,
COUNT(status = 'Y' ) AS StatusIsYes,
COUNT(status = 'N' ) AS StatusIsNo
 FROM 
students GROUP BY POSITION
于 2013-01-11T14:09:42.363 回答
1

当您想从同一个表中获取记录时,您可以使用 SELF JOIN。
例如:
表名称:员工
字段:EmpId,EmpName,ManagerId
现在,如果您想获取处于经理职位的员工的详细信息,我们需要编写如下查询:
SELECT e1.EmpId,e1.EmpName FROM EmployeeDetails e1 , EmployeeDetails e2 其中e1.EmpId=e2.ManagerId;

希望它会帮助你。

如需更多信息,请查看链接。

于 2013-01-11T14:32:14.207 回答