聚合函数
聚合函数将多行结果计算成单个结果。MySQL提供了许多聚合函数,如AVG、MAX、MIN、SUM、COUNT等等。
-
AVG():返回指定列的平均值。
示例代码:
复制代码 SELECT AVG(salary) AS avg_salary FROM employees; -
COUNT():返回某列的行数。
示例代码:
复制代码 SELECT COUNT(*) AS employee_count FROM employees; -
MAX():返回指定列的最大值。
示例代码:
复制代码 SELECT MAX(salary) AS max_salary FROM employees WHERE department_id=1; -
MIN():返回指定列的最小值。
示例代码:
复制代码 SELECT MIN(salary) AS min_salary FROM employees WHERE department_id=2; -
SUM():返回指定列的总和。
示例代码:
复制代码 SELECT SUM(salary) AS total_salary FROM employees WHERE department_id=3;
窗口函数
窗口函数是一类特殊的函数,它们可以在整个查询结果集中执行计算操作,而不仅仅是单独的行。MySQL支持ROW_NUMBER、RANK、DENSE_RANK、NTILE等窗口函数。
-
ROW_NUMBER():为每个分区内的行分配一个唯一编号。
示例代码:
复制代码 SELECT ROW_NUMBER() OVER(ORDER BY salary DESC) AS row_num, first_name, last_name, salary FROM employees WHERE department_id=1 ORDER BY salary DESC; -
RANK():计算每个分区内的行排名。
示例代码:
复制代码 SELECT RANK() OVER(PARTITION BY department_id ORDER BY salary DESC) AS dept_rank, first_name, last_name, salary FROM employees ORDER BY department_id, dept_rank; -
DENSE_RANK():计算部门内高于当前员工的人数。
示例代码:
复制代码 SELECT DENSE_RANK() OVER(PARTITION BY department_id ORDER BY salary DESC) AS dense_dept_rank, first_name, last_name, salary FROM employees ORDER BY department_id, dense_dept_rank; -
NTILE():将行分成指定数量的桶,返回每个桶的编号。
示例代码:
复制代码 SELECT NTILE(4) OVER(ORDER BY salary DESC) AS quartile, first_name, last_name, salary FROM employees ORDER BY quartile, salary DESC;
数值函数
数值函数用于对数字进行操作,如ABS、CEIL、FLOOR、MOD、RAND等等。
-
ABS():返回一个数的绝对值。
示例代码:
复制代码 SELECT ABS(-10); -
CEIL():将一个数向上取整为最接近的整数。
示例代码:
复制代码 SELECT CEIL(3.14); -
FLOOR():将一个数向下取整为最接近的整数。
示例代码:
复制代码 SELECT FLOOR(3.14); -
MOD():返回两个数相除的余数。
示例代码:
复制代码 SELECT MOD(10, 3); -
RAND():返回一个0到1之间的随机数。
示例代码:
复制代码 SELECT RAND();
字符串函数
字符串函数用于处理文本字符串,如CONCAT、LENGTH、SUBSTRING、TRIM等等。
-
CONCAT():将两个或多个字符串连接在一起。
示例代码:
复制代码 SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees; -
LENGTH():返回指定字符串的长度。
示例代码:
复制代码 SELECT LENGTH('hello world'); -
SUBSTRING():返回一个字符串的一部分,可以指定起始位置和长度。
示例代码:
复制代码 SELECT SUBSTRING('hello world', 1, 5); -
TRIM():去掉字符串的前导和后缀空格。
示例代码:
复制代码 SELECT TRIM(' hello world ');
日期和时间函数
日期和时间函数用于处理日期和时间,如NOW、DATE、TIME、YEAR、MONTH等等。
-
NOW():返回当前日期和时间。
示例代码:
复制代码 SELECT NOW(); -
DATE():返回一个日期的日期部分。
示例代码:
复制代码 SELECT DATE('2023-04-05 17:05:37'); -
TIME():返回一个日期的时间部分。
示例代码:
复制代码 SELECT TIME('2023-04-05 17:05:37'); -
YEAR():返回一个日期的年份部分。
示例代码:
复制代码 SELECT YEAR('2023-04-05'); -
MONTH():返回一个日期的月份部分。
示例代码:
复制代码 SELECT MONTH('2023-04-05');
Performance Schema Functions
Performance Schema是MySQL的一个可选组件,用于监视MySQL服务器的性能。Performance Schema函数可以获取有关服务器性能的详细信息,如性能事件、等待事件、锁等。
-
PERFORMANCE_SCHEMA_ENABLED():检查Performance Schema是否启用。
示例代码:
复制代码 SELECT PERFORMANCE_SCHEMA_ENABLED(); -
WAIT_FOR_EXECUTED_GTID_SET():等待执行的GTID集合。
示例代码:
复制代码 SELECT WAIT_FOR_EXECUTED_GTID_SET('1-1-1', 10);
Internal Functions
MySQL还提供了许多内部函数,例如CONNECTION_ID、CURRENT_USER、LAST_INSERT_ID等。
-
CONNECTION_ID():返回当前连接的ID。
示例代码:
复制代码 SELECT CONNECTION_ID(); -
CURRENT_USER():返回当前用户的用户名和主机名。
示例代码:
复制代码 SELECT CURRENT_USER(); -
LAST_INSERT_ID():返回上次插入操作的最后一个自增ID。
示例代码:
复制代码 INSERT INTO employees (first_name, last_name, salary) VALUES ('John', 'Smith', 50000); SELECT LAST_INSERT_ID();
Miscellaneous Functions
MySQL还提供了许多杂项函数,如COALESCE、IFNULL、NULLIF等。
-
COALESCE():返回参数列表中第一个非NULL值。
示例代码:
复制代码 SELECT COALESCE(NULL, 1, 2); -
IFNULL():如果第一个参数不为NULL,则返回第一个参数;否则返回第二个参数。
示例代码:
复制代码 SELECT IFNULL(NULL, 'hello'); -
NULLIF():如果两个参数相等,则返回NULL;否则返回第一个参数。
示例代码:
复制代码 SELECT NULLIF(10, 10);
以上是MySQL中的一些常用函数及其示例代码