【发布时间】:2014-01-14 02:54:01
【问题描述】:
我很难弄清楚以下 mysql 查询是如何工作的
SELECT dp.name, COUNT(em.dp) as employees
FROM dp LEFT JOIN em ON dp.name=em.dp
GROUP BY dp.name
HAVING COUNT(em.dp) = 2;
它只是显示哪些部门正好有 2 名员工。这是两张表:
em
----
id
full_name
dp
dp
----
id
name
这是我输入的一些条目。
INSERT INTO em (full_name, dp) VALUES ('Chris', 'ENG'), ('Steve', 'HR'), ('Mike', 'ACC'), ('Marvin', 'ACC');
INSERT INTO dp (name) VALUES ('ENG'), ('HR'), ('ACC');
有人可以用简单明了的方式解释上述查询吗?比如先发生的事情等等。
【问题讨论】:
-
我认为更相关的问题是您希望它返回什么?这是一个相当直接的查询。 "返回 dp 中的所有内容以及 ep 中的任何匹配项,其中每个 dp.name 恰好有 2 个匹配项"
-
您是否在任何文档中查找过
GROUP BY和HAVING? -
@SeanRedmond 我查阅了文档,了解 Joins、Group By 和 Have 如何处理简单案例,但不了解它们如何协同工作。
-
@JenZhang 你对哪一部分理解有问题? HAVING 应用于 GROUP BY 的结果
-
我认为 OP 部分需要了解 SQL 中评估的流程。通常,任何查询都应按以下模式读取:
FROM-WHERE-GROUP BY-HAVING-SELECT-ORDER BY。将其应用于上面的查询。这很容易。