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
)
)