我有一个表格,其中包含学生的姓名,电子邮件,职位等,以及他们的“状态”(可以是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完成但是我想知道如何使用来加入。答案 0 :(得分:2)
您不需要加入:
SELECT
position,
SUM(status = 'Y') AS StatusIsYes,
SUM(status = 'N') AS StatusIsNo
FROM students
GROUP BY position
请注意CASE
的相当时髦的分配,因为在mysql(仅)中true
是1
而false
是0
,所以{{1一个条件计算它的真实次数:)
答案 1 :(得分:1)
尝试::
SELECT
position,
COUNT(status = 'Y' ) AS StatusIsYes,
COUNT(status = 'N' ) AS StatusIsNo
FROM
students GROUP BY POSITION
答案 2 :(得分:1)
如果要从同一个表中获取记录,可以使用SELF JOIN
例如:
表名:员工
字段:EmpId,EmpName,ManagerId
现在,如果您想获得经理位置的Empolyees的详细信息,我们需要编写如下查询:
SELECT e1.EmpId,e1.EmpName FROM EmployeeDetails e1,EmployeeDetails e2,其中e1.EmpId = e2.ManagerId;
希望它会对你有所帮助。
要了解更多信息,请查看this链接。