Skip to content

sql-useful-functions

SQL 提供了丰富的内置函数库,用于直接在查询中执行计算、处理数据和格式化结果。理解这些函数是编写高效、强大 SQL 的关键。它们可以大致分为几个类别。

聚合函数对一组行进行操作,返回单个汇总值。它们最常与 GROUP BY 子句一起使用。

  • COUNT(column | *) - 计算行数。COUNT(*) 计算所有行,而 COUNT(column) 计算该列中的非 NULL 值。
  • SUM(column) - 计算列中所有数值的总和。
  • AVG(column) - 计算列中所有数值的平均值。
  • MIN(column) - 查找列中的最小值。
  • MAX(column) - 查找列中的最大值。
  • STRING_AGG(column, separator) (PostgreSQL/SQL Server) / GROUP_CONCAT(column) (MySQL) - 将多行中的字符串值连接成一个字符串。

窗口函数是现代且强大的功能。它们对与当前行相关的表行集执行计算。与聚合函数不同,它们不会折叠行;它们根据 OVER() 子句定义的数据“窗口”为每一行返回一个值。

  • ROW_NUMBER() - 为分区内的每行分配一个从 1 开始的唯一整数。
  • RANK() / DENSE_RANK() - 根据排序为每行分配一个排名。RANK() 在出现并列后会在排名中留下空隙,而 DENSE_RANK() 则不会。
  • LEAD(column, offset) - 访问同一结果集中后续行的数据,无需自连接。
  • LAG(column, offset) - 访问同一结果集中前一行的数据。
  • SUM(column) OVER (...) - 计算累积和或移动总计。

这些函数用于操作字符串。

  • CONCAT(string1, string2, ...) - 连接两个或多个字符串。|| 运算符是常见的替代方法。
  • LENGTH(string) / LEN(string) - 返回字符串中的字符数。
  • UPPER(string) / LOWER(string) - 将字符串转换为大写或小写。
  • SUBSTRING(string FROM start FOR length) - 提取字符串的一部分。
  • TRIM([BOTH|LEADING|TRAILING] chars FROM string) - 移除字符串开头、结尾或两端的字符(默认为空格)。
  • COALESCE(value1, value2, ...) - 返回列表中第一个非 NULL 值。对于提供默认值非常有用。

这些函数执行数学运算。

  • ROUND(number, decimals) - 将数字四舍五入到指定的小数位数。
  • CEIL(number) / CEILING(number) - 将数字向上舍入到最接近的整数。
  • FLOOR(number) - 将数字向下舍入到最接近的整数。
  • ABS(number) - 返回数字的绝对值(非负值)。
  • RAND() / RANDOM() - 生成一个随机浮点数(行为因数据库而异)。

这些函数对于处理时间数据至关重要。

  • CURRENT_TIMESTAMP / NOW() - 返回数据库服务器的当前日期和时间。
  • CURRENT_DATE / CURRENT_TIME - 返回当前日期或时间。
  • EXTRACT(part FROM date) - 从日期中提取一部分(例如,YEAR、MONTH、DAY)。
  • DATE_ADD() / DATE_SUB() (MySQL) 或时间间隔算术 (PostgreSQL) - 从日期中添加或减去一个时间间隔。示例:order_date + INTERVAL '30 days'。