本文共 3042 字,大约阅读时间需要 10 分钟。
作为数据库开发人员或数据分析师,熟悉SQL中的函数是必不可少的。SQL函数分为聚合函数和单行函数两大类,分别用于数据统计和数据处理。以下将详细介绍两种函数的用法、注意事项以及实际应用场景。
聚合函数用于对数据进行统计和汇总,常见的包括SUM、AVG、MAX、MIN、COUNT等函数。
SUM():用于求和,适用于数值型数据,忽略null值。
select SUM(salary) from employees; # 求总工资
AVG():计算平均值,同样适用于数值型数据。
select AVG(salary) from employees; # 计算平均工资
MAX() 和 MIN():求最大值和最小值,适用于任何数据类型,忽略null值。
select MAX(salary) from employees; # 求最大工资select MIN(salary) from employees; # 求最小工资
COUNT():统计非空值的数量,适用于任何数据类型。
select COUNT(salary) from employees; # 统计非空工资记录数量
为了去除重复值后再进行统计,可以使用DISTINCT关键字与聚合函数配合使用。
select SUM(DISTINCT salary) from employees; # 去重后求工资总和select COUNT(DISTINCT salary) from employees; # 去重后统计工资种类数量
COUNT函数的用法较为灵活,常见场景包括:
select count(salary) from employees; # 统计非空工资记录
select count(*) from employees; # 统计表中总记录数
select count(1) from employees; # 通过添加虚拟列统计行数
字段限制:聚合函数通常只能用于GROUP BY后的字段,否则会报错。
select AVG(salary), employee_id from employees; # 错误,employee_id不是GROUP BY字段
性能考虑:在处理大数据量时,尽量避免多次使用聚合函数,否则可能影响性能。
单行函数主要用于字符串操作、日期处理和数学计算等场景。
LENGTH():获取字符串的字节长度。
select LENGTH("mary"); # 返回4
CONCAT():拼接字符串。
select CONCAT("jack", " loves", " rose"); # 返回"jack loves rose"
UPPER() 和 LOWER():转换字符串大小写。
select UPPER("JACKrose"); # 返回"JACKROSE"select LOWER("JACKrose"); # 返回"jackrose"
SUBSTR():截取字符串子串(MySQL中索引从1开始)。
select SUBSTR("helloworld", 4); # 返回"world"select SUBSTR("helloworld", 2, 4); # 返回"ello"
INSTR():查找字符串中子串的位置。
select INSTR("老鼠爱大米哈哈", "大米"); # 返回4
TRIM():去掉字符串两端的空格。
select TRIM(" 你今天学习了吗 "); # 返回"You今天学习了吗"
LPAD 和 RPAD:左填充或右填充字符串。
select LPAD("也有梦想", 8, "咸鱼"); # 返回"咸鱼咸鱼也有梦想"
REPLACE():替换字符串中的子串。
select REPLACE("如果我是程序员你愿意嫁给我吗?", "程序员", "DJ"); # 返回"If I是DJ你愿意嫁给我吗?"
ROUND():四舍五入数值。
select ROUND(1.65); # 返回2select ROUND(1.12); # 返回1
CEIL 和 FLOOR:向上取整或向下取整。
select CEIL(1.93); # 返回2select FLOOR(-2.76); # 返回-2
TRUNCATE():截断小数。
select TRUNCATE(1.9342, 2); # 返回1.93
MOD():取余运算。
select MOD(10, 3); # 返回1select MOD(-10, 3); # 返回-1
NOW()、CURDATE 和 CURTIME:获取当前日期和时间。
select NOW(); # 返回当前日期和时间select CURDATE(); # 返回当前日期select CURTIME(); # 返回当前时间
DATE和TIME分解函数:
select YEAR(NOW()), MONTH(NOW()), DAY(NOW()); # 返回年、月、日
DATEDIFF():计算两个日期之间的天数。
select DATEDIFF(MAX(hiredate), MIN(hiredate)) from employees; # 求员工入职日期间隔
STR_TO_DATE 和 DATE_FORMAT:日期格式转换。
select STR_TO_DATE('09-13-2020', '%m-%d-%Y'); # 返回2020-09-13select DATE_FORMAT(NOW(), '%d日--%m月--%Y年'); # 返回格式化日期
IF语句:条件判断。
select IF(10 > 5, '大', '小'); # 返回"大"
CASE表达式:分支处理。
select last_name, salary, CASE WHEN salary > 20000 THEN 'A级别' WHEN salary > 15000 THEN 'B级别' WHEN salary > 10000 THEN 'C级别' ELSE 'D级别' END as 工资级别from employeesorder by salary DESC;
VERSION():获取数据库版本。
select VERSION(); # 返回数据库版本信息
DATABASE():获取当前数据库名称。
select DATABASE(); # 返回当前数据库名称
USER():获取当前登录用户信息。
select USER(); # 返回用户信息
通过上述介绍,可以看到SQL函数的强大功能,涵盖了从数据统计到数据处理的各个方面。熟练掌握这些函数,能够显著提升数据库开发和数据分析的效率。在实际工作中,合理使用这些函数可以帮助你快速解决问题,提升工作效率。
转载地址:http://xxbfk.baihongyu.com/