返回
数据库中的分组(GROUP BY)与过滤(HAVING)揭秘:准确理解,高效查询!
后端
2023-12-20 11:42:33
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中强大的数据分组和过滤工具。掌握这两者的使用可以帮助您更有效地查询数据,并提高应用程序的性能。