Mysql 我的sql查询是什么

Mysql 我的sql查询是什么,mysql,sql,mysqli,Mysql,Sql,Mysqli,我的数据库中有两个表 Table 1. employee id name department_id Table 2. department id name 现在我有两个问题 1.如何查询以获取其部门的所有员工? 所以我写了这个查询 SELECT employee.name , department.name FROM employee JOIN department ON employee.department_id = department.id

我的数据库中有两个表

 Table 1. employee
id
name
department_id



 Table 2. department
id
name
现在我有两个问题

1.如何查询以获取其部门的所有员工? 所以我写了这个查询

SELECT employee.name
     , department.name 
  FROM employee 
  JOIN department 
    ON employee.department_id = department.id
这似乎是正确的,但我无法为下一个问题编写查询

问题是:


如果我只想获取员工人数最多的部门?

您的查询应该适用于第一个问题

第二,你可以用这个。子查询将为您提供most员工的部门Id,外部查询将为其提供更多详细信息

select * from department where department_id in
(select limit 1 Employee.department_id from Employee group by department_id 
order by count(Employee.name) desc)

这在MySQL中是一个很难处理的问题。这里有一个选择:

SELECT d1.id, d1.name
FROM department d1
INNER JOIN employee e1
    ON d1.id = e1.department_id
GROUP BY d1.id, d1.name
HAVING COUNT(*) = (SELECT COUNT(*) FROM department d2 INNER JOIN employee e2
                       ON d2.id = e2.department_id
                   GROUP BY d2.id ORDER BY COUNT(*) DESC LIMIT 1);
请注意,如果您使用的是具有分析功能支持的数据库,如SQL Server,则问题会变得容易得多:

SELECT id, name
FROM
(
    SELECT d.id, d.name, DENSE_RANK() OVER (ORDER BY COUNT(*) DESC) dr
    FROM department d
    INNER JOIN employee e
        ON d.id = e.department_id
    GROUP BY d.id, d.name
) t
WHERE t.dr = 1;

这个问题可以通过多种方式解决:

使用子查询

使用连接

为了保证只有一个部门

SELECT
  *
FROM
  department
WHERE
  id = (SELECT department_id
          FROM employee
      GROUP BY department_id
      ORDER BY COUNT(*) DESC
         LIMIT 1
       )
注意,如果两个部门与联合最大员工数挂钩,这仍然只会选择任意选择的其中一个,每次都可能不同

要处理领带,您可以执行以下操作

SELECT *
  FROM department
 WHERE id IN (SELECT department_id
                FROM employee
            GROUP BY department_id
              HAVING COUNT(*) = (SELECT COUNT(*)
                                   FROM employee
                               GROUP BY department_id
                               ORDER BY COUNT(*) DESC
                                  LIMIT 1
                                )
             )

首先检查与列相关的两个类型是否具有相同的名称、相同的数据类型和使用子查询, 按部门id从员工组中选择MAXCOUNTdept\u id中具有COUNTdepartment\u id的员工中选择id所在部门的名称


请参见:您需要使用嵌套查询来完成此操作。查看本教程您需要只选择员工最多的部门,还是同时选择该部门的所有员工?@MatBailie是唯一员工最多的部门这是MySQL,不是SQL Server这是一个MySQL问题,不是SQL Server来重复上述评论。对不起,但是MySQL不支持查询的哪一部分?我把这个问题解释为我对SQL的查询,而不是对MySQL的查询。TOP 1 vs LIMIT 1?小提示:你还可以对应用程序代码进行缩进和格式化。同样,使用SQL代码进行缩进和格式化会使写和读一行很长的代码更加方便。@RaymondNijland谢谢。完成!
SELECT
  *
FROM
  department
WHERE
  id = (SELECT department_id
          FROM employee
      GROUP BY department_id
      ORDER BY COUNT(*) DESC
         LIMIT 1
       )
SELECT *
  FROM department
 WHERE id IN (SELECT department_id
                FROM employee
            GROUP BY department_id
              HAVING COUNT(*) = (SELECT COUNT(*)
                                   FROM employee
                               GROUP BY department_id
                               ORDER BY COUNT(*) DESC
                                  LIMIT 1
                                )
             )