赞
踩
聚合和分组是数据库中两个重要的概念,主要用于对数据进行统计和分析。
聚合操作是指对一组数据执行计算,返回一个单一的结果。常见的聚合函数包括:
计数 (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;
分组操作是指将数据按某个字段进行分组,然后对每个分组进行聚合操作。使用 GROUP BY
语句可以实现分组。常见的用法如下:
基本分组:
按部门统计员工的数量:
SELECT dept, COUNT(*)
FROM employees
GROUP BY dept;
分组后的聚合操作:
按部门统计每个部门的平均工资:
SELECT dept, AVG(salary)
FROM employees
GROUP BY dept;
HAVING
子句用于对分组后的结果进行过滤。它类似于 WHERE
子句,但 WHERE
是在分组前过滤数据,而 HAVING
是在分组后过滤数据。
SELECT dept, AVG(salary)
FROM employees
GROUP BY dept
HAVING COUNT(*) > 5;
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 - 将结果集按照一个或多个列进行分组。
SELECT dept, AVG(salary)
FROM employee
GROUP BY dept;
以上查询语句将employee表按部门分组,并计算每个部门的平均工资。
COUNT() 和 SUM()
SELECT COUNT(*)
计算表中所有行的数量,包括NULL值。SELECT COUNT(column)
仅计算指定列中非NULL值的数量关于聚合函数和分组操作的详细解释如下:
查询每个部门的最高工资
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;
查询工资最高不超过两万的部门及其总工资开支。
在 HAVING
子句中使用聚合函数进行筛选,
SELECT dept, SUM(salary)
FROM employee
GROUP BY dept
HAVING MAX(salary) < 20000;
可以筛选出工资最高不超过两万的部门。
聚合函数和分组操作在SQL中是非常有用的功能,允许用户对数据进行各种计算和分析。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。