当前位置:  首页>> 技术小册>> SQL基础教程(中)

函数的种类

在SQL(Structured Query Language)中,函数是执行特定任务、返回结果集的强大工具。它们可以简化查询语句,提高数据处理的效率和准确性。根据功能和用途的不同,SQL中的函数大致可以分为几大类:聚合函数、标量函数、字符串函数、数值函数、日期和时间函数、条件函数(或称为逻辑函数)、窗口函数等。本章节将详细探讨这些不同类型的函数及其应用场景。

1. 聚合函数

聚合函数主要用于对一组值执行计算,并返回单个值。这类函数在数据分析和报表生成中尤为重要。常见的聚合函数包括:

  • COUNT():计算行数或特定列中非NULL值的数量。

    • 示例:SELECT COUNT(*) FROM employees; 计算员工表中的总行数。
    • SELECT COUNT(department_id) FROM employees; 计算有部门ID的员工数量。
  • SUM():计算数值列中值的总和。

    • 示例:SELECT SUM(salary) FROM employees; 计算员工总薪资。
  • AVG():计算数值列的平均值。

    • 示例:SELECT AVG(salary) FROM employees; 计算员工平均薪资。
  • MAX()MIN():分别返回列中的最大值和最小值。

    • 示例:SELECT MAX(salary) FROM employees; 找出最高薪资。
    • SELECT MIN(hire_date) FROM employees; 找出最早的入职日期。

2. 标量函数

标量函数对输入参数执行操作,并返回单个值。这些函数可以应用于SELECT语句的SELECT列表、WHERE子句、ORDER BY子句等地方。根据返回值的类型,标量函数可以进一步细分为字符串函数、数值函数、日期和时间函数等,但在此处我们将其视为一个独立类别讨论。

  • 示例SELECT LOWER(name) FROM employees; 将员工姓名转换为小写。

3. 字符串函数

字符串函数用于处理文本数据,如拼接、截取、转换等。

  • CONCAT()||(在某些数据库中):连接两个或多个字符串。

    • 示例:SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;
  • SUBSTRING()MID():从字符串中提取子串。

    • 示例:SELECT SUBSTRING(email, 1, CHARINDEX('@', email) - 1) AS local_part FROM users;
  • LENGTH()LEN():返回字符串的长度。

    • 示例:SELECT LENGTH(description) FROM products;
  • REPLACE():替换字符串中的部分文本。

    • 示例:SELECT REPLACE(email, '@olddomain.com', '@newdomain.com') FROM users;

4. 数值函数

数值函数用于执行数学计算,如四舍五入、取绝对值等。

  • ROUND():对数值进行四舍五入。

    • 示例:SELECT ROUND(salary, 0) FROM employees; 将薪资四舍五入到整数。
  • FLOOR():返回不大于参数的最大整数。

    • 示例:SELECT FLOOR(salary / 1000) * 1000 FROM employees; 将薪资向下取整到最近的千位数。
  • ABS():返回参数的绝对值。

    • 示例:SELECT ABS(balance) FROM accounts;

5. 日期和时间函数

日期和时间函数用于处理日期和时间值,如获取当前日期、计算日期差等。

  • NOW()CURRENT_TIMESTAMP:返回当前的日期和时间。

    • 示例:SELECT NOW();
  • DATE_ADD()ADDDATE():向日期添加指定的时间间隔。

    • 示例:SELECT DATE_ADD('2023-01-01', INTERVAL 1 MONTH);
  • DATEDIFF():计算两个日期之间的天数差。

    • 示例:SELECT DATEDIFF('2023-03-15', '2023-01-01');
  • YEAR(), MONTH(), DAY():分别提取日期中的年、月、日部分。

    • 示例:SELECT YEAR(birthdate) FROM customers;

6. 条件函数(逻辑函数)

条件函数根据条件对值进行评估,并返回相应的结果。最典型的条件函数是CASE语句,但也有一些内置的逻辑函数,如COALESCE()

  • CASE:基于一系列条件对数据进行转换。

    • 示例:SELECT name, CASE WHEN salary > 5000 THEN 'High' ELSE 'Low' END AS salary_level FROM employees;
  • COALESCE():返回参数列表中第一个非NULL值。

    • 示例:SELECT COALESCE(first_name, 'Unknown') FROM customers;

7. 窗口函数

窗口函数是SQL 2003标准中引入的一种高级功能,它们允许对一组行执行计算,而不需要将这些行组合成单个输出行。窗口函数通常与OVER()子句一起使用,以指定窗口的分区和排序规则。

  • ROW_NUMBER():为窗口内的每行分配一个唯一的序号。

    • 示例:SELECT name, department, salary, ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rank FROM employees;
  • RANK()DENSE_RANK():根据排序规则为窗口内的行分配排名,但处理并列的方式不同。

    • 示例:SELECT name, score, RANK() OVER (ORDER BY score DESC) AS rank FROM scores;
  • SUM(), AVG() 等聚合函数作为窗口函数使用时,可以在不分组的情况下计算累计总和或平均值。

    • 示例:SELECT name, salary, SUM(salary) OVER (PARTITION BY department ORDER BY hire_date) AS cumulative_salary FROM employees;

总结

SQL中的函数种类繁多,每种函数都有其特定的用途和优势。通过合理使用这些函数,可以极大地提高SQL查询的灵活性和效率。无论是进行简单的数据检索,还是进行复杂的数据分析和报表生成,掌握这些函数都是必不可少的。希望本章内容能帮助读者更好地理解SQL函数的种类及其应用,为后续的数据库管理和数据分析工作打下坚实的基础。


该分类下的相关小册推荐: