【问题标题】:JOIN data from same tableJOIN 同一张表的数据
【发布时间】:2013-01-11 14:04:17
【问题描述】:

我有一个表,其中包含学生的姓名、电子邮件、职位等,以及他们的“状态”(可以是 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 来完成。

【问题讨论】:

    标签: mysql database join


    【解决方案1】:

    您不需要加入:

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

    注意 CASE 的相当时髦的分配,因为在 mysql 中(仅)true1false0,所以条件的 sum() 计算它为真的次数:)

    【讨论】:

    • 谢谢 - 这看起来确实比我拥有的要干净得多。但是我想弄清楚如何使用 JOIN 来做到这一点;有人告诉我这是可能的,但我不知道怎么做。但无论如何都要 +1
    • 您不仅不需要需要加入,使用它也没有任何意义 - 这样做只是为了这样做,但会是一个糟糕的解决方案
    • 你是对的。我只是想对 JOIN 子句进行更多练习,而使用 JOIN 的解决方案在这里对我来说并不明显
    【解决方案2】:

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

    希望对你有帮助。

    更多信息请查看this链接。

    【讨论】:

      【解决方案3】:

      试试 ::

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

      【讨论】:

      • @Bohemian:你的速度超快...:-)
      猜你喜欢
      • 1970-01-01
      • 2013-01-25
      • 2018-05-09
      • 1970-01-01
      • 2021-09-17
      • 2016-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多