返回

数据库中的分组(GROUP BY)与过滤(HAVING)揭秘:准确理解,高效查询!

后端

GROUP BY:数据分组利器

GROUP BY子句用于将数据根据指定的列或表达式进行分组,从而对分组后的数据进行聚合操作,如求和、求平均值、求最大值或最小值等。

SELECT department, SUM(salary)
FROM employee
GROUP BY department;

上述查询将根据部门对员工工资进行分组,并计算每个部门的总工资。

HAVING:分组后数据的过滤器

HAVING子句用于对分组后的数据进行过滤,只选择满足特定条件的行。HAVING子句只能与GROUP BY子句一起使用。

SELECT department, SUM(salary)
FROM employee
GROUP BY department
HAVING SUM(salary) > 100000;

上述查询将根据部门对员工工资进行分组,并计算每个部门的总工资。但它只选择那些总工资大于100,000的部门。

GROUP BY与HAVING的异同

GROUP BY用于分组数据,而HAVING用于过滤分组后的数据。

GROUP BY子句必须在SELECT子句之前,而HAVING子句必须在GROUP BY子句之后。

GROUP BY子句可以与聚合函数一起使用,而HAVING子句只能与聚合函数一起使用。

GROUP BY子句可以与ORDER BY子句一起使用,而HAVING子句不能与ORDER BY子句一起使用。

真实案例:寻找每个工作岗位的最高薪资

为了更直观地理解GROUP BY和HAVING的使用,我们来看一个真实案例。

假设我们有一个员工表,其中包含员工的姓名、工作岗位、部门和工资等信息。我们想找到每个工作岗位的最高薪资。

SELECT job_title, MAX(salary)
FROM employee
GROUP BY job_title;

上述查询将根据工作岗位对员工工资进行分组,并计算每个工作岗位的最高工资。

但是,如果我们只想找到那些最高工资大于100,000的工作岗位,我们可以使用HAVING子句:

SELECT job_title, MAX(salary)
FROM employee
GROUP BY job_title
HAVING MAX(salary) > 100000;

这样,我们就只找到了那些最高工资大于100,000的工作岗位。

结论

GROUP BY和HAVING是SQL中强大的数据分组和过滤工具。掌握这两者的使用可以帮助您更有效地查询数据,并提高应用程序的性能。