程序员社区

MySQL系列教程 --- 84、MySQL 中的聚合函数

MySQL 的聚合函数用于对多个值执行计算,并以单个值返回结果,例如所有值的平均值、所有值的总和以及某些值组中的最大值和最小值。在数据查询语言中,我们主要使用带[SELECT 语句的聚合函数。

句法:

以下是在 MySQL 中使用聚合函数的语法:

function_name (DISTINCT | ALL expression)  

在上面的语法中,我们使用了以下参数:

  • 首先,我们需要指定聚合函数的名称。
  • 其次,当我们想要基于不同的值计算结果时,我们使用DISTINCT修饰符,或者在计算所有值(包括重复项)时使用ALL修饰符。默认为全部。
  • 第三,我们需要指定涉及列和算术运算符的表达式。

MySQL 中有各种聚合函数可用。下表总结了一些最常用的聚合函数:

聚合函数 说明
count() 它返回行数,包括组中具有 NULL 值的行。
sum() 它返回集合中的总和值(非空)。
average() 它返回表达式的平均值。
min() 它返回集合中的最小(最低)值。
max() 它返回集合中的最大值(最高)。
groutp_concat() 它返回一个连接的字符串。
first() 它返回表达式的第一个值。
last() 它返回表达式的最后一个值。

为什么我们使用聚合函数?

我们主要在数据库、电子表格和许多其他数据处理软件包中使用聚合函数。在业务环境中,不同的组织级别需要不同的信息,例如对了解整体数字而不是个人细节感兴趣的高层管理人员。这些函数从我们的数据库中生成汇总数据。因此,它们被广泛用于经济和金融领域,以代表经济健康状况或股票和行业表现。

让我们以 myflix(拥有大量电影收藏的视频流媒体网站)数据库为例,其中管理可能需要以下详细信息:

  • 租借最多的电影。
  • 最少租借的电影。
  • 每部电影在一个月内的平均租出次数。

借助聚合函数,我们可以轻松生成这些细节。

让我们详细讨论最常用的聚合函数。首先,我们将创建一个新表来演示所有聚合函数。

执行以下语句以创建employee 表:

CREATE TABLE employee(  
    name varchar(45) NOT NULL,    
    occupation varchar(35) NOT NULL,    
    working_date date,  
    working_hours varchar(10)  
);  

执行以下语句将记录插入到员工表中:

INSERT INTO employee VALUES    
('Robin', 'Scientist', '2020-10-04', 12),  
('Warner', 'Engineer', '2020-10-04', 10),  
('Peter', 'Actor', '2020-10-04', 13),  
('Marco', 'Doctor', '2020-10-04', 14),  
('Brayden', 'Teacher', '2020-10-04', 12),  
('Antonio', 'Business', '2020-10-04', 11);  

现在,执行SELECT 语句以显示记录:

file

Count() 函数

MySQL count() 函数返回表达式中值的总数。此函数根据指定条件生成表的所有行或仅部分行,其返回类型为BIGINT。如果没有找到任何匹配的行,则返回零。它可以处理数字和非数字数据类型。

例子

假设我们要获取员工表中员工的总数,我们需要使用 count() 函数,如以下查询所示:

mysql> SELECT COUNT(name) FROM employee;     

输出:

执行后,我们可以看到这张表有六个员工。

file

Sum() 函数

MySQL sum() 函数返回表达式的总和(非 NULL)值。如果结果集没有任何行,则返回 NULL。它仅适用于数字数据类型。

假设我们要计算表中所有员工的总工作小时数,我们需要使用 sum() 函数,如以下查询所示:

mysql> SELECT SUM(working_hours) AS "Total working hours" FROM employee;    

输出:

执行后,我们可以在表中看到所有员工的总工作时间。

file

AVG() 函数

MySQL AVG() 函数计算列中指定值的平均值。与 SUM() 函数类似,它也仅适用于数字数据类型。

假设我们想要获得表中所有员工的平均工作时间,我们需要使用 AVG() 函数,如以下查询所示:

mysql> SELECT AVG(working_hours) AS "Average working hours" FROM employee;    

输出:

执行后,我们可以看到组织中所有员工的平均工作时间:

file

MIN() 函数

MySQL MIN() 函数返回指定列的最小(最低)值。它也仅适用于数字数据类型。

假设我们想要获得表中可用员工的最短工作时间,我们需要使用 MIN() 函数,如以下查询所示:

mysql> SELECT MIN(working_hours) AS Minimum_working_hours FROM employee;    

输出:

执行后,我们可以看到表中一个员工可用的最短工作时间:

file

MAX() 函数

MySQL MAX() 函数返回指定列的最大(最高)值。它也仅适用于数字数据类型。

假设我们想要获得表中可用员工的最长工作时间,我们需要使用 MAX() 函数,如以下查询所示:

mysql> SELECT MAX(working_hours) AS Maximum_working_hours FROM employee;    

输出:

执行后,我们可以看到表中一个员工的最长可用工作时间:

file

FIRST() 函数

此函数返回指定列的第一个值。要获得列的第一个值,我们必须使用LIMIT子句。这是因为 FIRST() 函数仅在 MS Access 中支持。

假设我们要获取表中可用员工的第一个工作日期,我们需要使用以下查询:

mysql> SELECT working_date FROM employee LIMIT 1;    

输出:

执行后,我们可以看到表中可用的员工的第一个工作日期:

file

LAST() 函数

此函数返回指定列的最后一个值。要获取列的最后一个值,我们必须使用ORDER BYLIMIT子句。这是因为 LAST() 函数仅在 MS Access 中支持。

假设我们想要获取表中可用员工的最后一个工作时间,我们需要使用以下查询:

mysql> SELECT working_hours FROM employee ORDER BY name DESC LIMIT 1;    \

输出:

执行后,我们可以看到表中一个员工的最后一个工作时间可用:

file

GROUP_CONCAT() 函数

GROUP_CONCAT() 函数将多行的连接字符串返回到单个字符串中。如果该组包含至少一个非空值,则它始终返回一个字符串值。否则,我们将得到一个空值。

假设我们有另一个员工表,如下所示:

file

如果我们想在employee表上连接相同dept_id的指定,我们需要使用以下查询:

mysql> SELECT emp_id, emp_fname, emp_lname, dept_id,     
GROUP_CONCAT(designation) as "designation" FROM employee group by emp_id;    

输出:

执行后我们可以看到同一个dept_id的指定拼接成功:

file

赞(0) 打赏
未经允许不得转载:IDEA激活码 » MySQL系列教程 --- 84、MySQL 中的聚合函数

一个分享Java & Python知识的社区