聚合和分组是数据库中两个重要的概念,主要用于对数据进行统计和分析。
1. 聚合 (Aggregation)
聚合操作是指对一组数据执行计算,返回一个单一的结果。常见的聚合函数包括:
计数 (COUNT): 计算某个字段或记录的数量。
SELECT COUNT(*) FROM employees;求和 (SUM): 计算某个数值字段的总和。
SELECT SUM(salary) FROM employees;最小值 (MIN): 获取某个字段的最小值。
SELECT MIN(salary) FROM employees;最大值 (MAX): 获取某个字段的最大值。
SELECT MAX(salary) FROM employees;平均值 (AVG): 计算某个数值字段的平均值。
SELECT AVG(salary) FROM employees;
2. 分组 (Grouping)
分组操作是指将数据按某个字段进行分组,然后对每个分组进行聚合操作。使用 GROUP BY
语句可以实现分组。常见的用法如下:
基本分组:按部门统计员工的数量:
SELECT dept, COUNT(*)
FROM employees
GROUP BY dept;分组后的聚合操作:按部门统计每个部门的平均工资:
SELECT dept, AVG(salary)
FROM employees
GROUP BY dept;
3. HAVING 子句
HAVING
子句用于对分组后的结果进行过滤。它类似于 WHERE
子句,但 WHERE
是在分组前过滤数据,而 HAVING
是在分组后过滤数据。
使用 HAVING 过滤分组后的结果:统计每个部门中员工数量超过5的部门的平均工资: SELECT dept, AVG(salary)
FROM employees
GROUP BY dept
HAVING COUNT(*) > 5;
举例1
mysql> select * from items;
+----+-----------+
| id | item |
+----+-----------+
| 1 | 2 |
| 2 | NULL |
| 3 | 9 |
| 4 | 534214123 |
+----+-----------+
当他执行以下 SQL 语句:
select count(*), count(item)
from items;
将会得到的结果是:
+----------+-------------+
| count(*) | count(item) |
+----------+-------------+
| 4 | 3 |
+----------+-------------+
这是因为 count(*)
会计算表中的所有行数,而 count(column_name)
只会计算指定列中非 NULL 值的行数。在 items
表中,总共有 4 行数据,其中 item
列中有 1 行数据为 NULL 值。因此,count(*)
的结果是 4,count(item)
的结果是 3。
SELECT SUM(total)
FROM orders
WHERE deal = true AND unit_price > 1000;
在这个查询中:
SUM(total)
计算满足条件的订单的总值。WHERE deal = true AND unit_price > 1000
限定条件:已成交的订单且单价超过 1000。
聚合函数
聚合函数在SQL中用于对一组值执行计算,并返回单一值。常用的聚合函数包括:
COUNT() - 计算行数或非NULL列的数量。
SELECT COUNT(*) FROM employee;SUM() - 计算某列的总和。
SELECT SUM(salary) FROM employee;MIN() - 返回某列的最小值。
SELECT MIN(salary) FROM employee;MAX() - 返回某列的最大值。
SELECT MAX(salary) FROM employee;AVG() - 计算某列的平均值。
SELECT AVG(salary) FROM employee;
分组
在SQL中,使用 GROUP BY
子句将结果集按一个或多个列进行分组,通常与聚合函数一起使用。通过分组,可以对每个组进行聚合计算。以下是详细解释和举例:
GROUP BY - 将结果集按照一个或多个列进行分组。
以上查询语句将employee表按部门分组,并计算每个部门的平均工资。SELECT dept, AVG(salary)
FROM employee
GROUP BY dept;
详细解释每个选项
COUNT() 和 SUM() SELECT COUNT(*)
计算表中所有行的数量,包括NULL值。SELECT COUNT(column)
仅计算指定列中非NULL值的数量
关于聚合函数和分组操作的详细解释如下:
###举例2
查询每个部门的最高工资
SELECT dept, MAX(salary) AS max_salary
FROM employee
GROUP BY dept;查询每个部门的最高工资。
查询工资最低的员工的工资信息
SELECT dept, MIN(salary) AS min_salary
FROM employee
GROUP BY dept;查询每个部门工资最低的员工的工资。
查询每个部门工资总和不超过两万的部门及其总工资开支
SELECT dept, SUM(salary) AS total_salary
FROM employee
GROUP BY dept
HAVING MAX(salary) < 20000;查询工资最高不超过两万的部门及其总工资开支。
举例3
在 HAVING
子句中使用聚合函数进行筛选,
SELECT dept, SUM(salary)
FROM employee
GROUP BY dept
HAVING MAX(salary) < 20000;
可以筛选出工资最高不超过两万的部门。
聚合函数和分组操作在SQL中是非常有用的功能,允许用户对数据进行各种计算和分析。
非常感谢您读到这里!如果您觉得这篇文章对您有帮助,请不要忘记关注公众号。关注后,您将第一时间获得最新的AI、云计算、运维(Linux、数据库,容器等)技术,以及更多实用的技能干货。
点击页面右上角的“关注”按钮,不错过任何精彩内容!

扫码获取联系方式







