聚合函数:
求和
格式:sum(需要求和的列)
例如:sum (stu_score) # 求学生总分
一般配合group by使用
---------------------------------------------------------------------------------------------------------------------------------
平均值
格式:avg(需要平均的列)
例如:avg (stu_score) # 求学生平均分
一般配合group by使用
---------------------------------------------------------------------------------------------------------------------------------
最大和最小
格式:max(需要求最大的列),min(需要求最小的列)
例如:max (stu_score) # 求学生最高分
min (stu_score) # 求学生最高分
--------------------------------------------------------------------------------------------------------------------------------
计数
格式:count(需要计数的列)或者count(1)或者count(*)
例如:count(stu_score) # 有多少组学生成绩
注意:
1.count(1)和count(*)会统计null值,而count(普通列)不会统计null值
2.count(主键列)走的是索引所以效率最高,count(1)只要检查有值就会计数所以略快与count(*),而count(普通列)需要筛选null,所以最慢
效率:count(主键列) > count(1) > count(*) > count(普通列)
------------------------------------------------------------------------------------------------------------------------------
拼接字符串
格式:group_concat([distinct] expr [,expr ...]
[order by {unsigned_integer | col_name | expr} [asc | desc] [,col_name ...]]
[separator str_val])
distinct:可选,用于去除重复值
expr:要连接的列或表达式
order by:可选,用于指定连接前对值的排序方式
separator:可选,用于定义连接值之间的分隔符,默认为逗号(,)
数学类函数:
绝对值
格式:abs(需要绝对值的列)
例如:abs(stu.score) # 求绝对值
----------------------------------------------------------------------------------------------------------------------------
天花板数
格式:ceil(需要求整数的数字) # 大于或等于x的最小整数
例如:ceil(2.135) 结果:3
------------------------------------------------------------------------------------------------------------------------------
地板数
格式:floor(需要求整数的数字) # 小于或等于x的最大整数
例如:floor(5.321) 结果:5
-------------------------------------------------------------------------------------------------------------------------------
限制小数点位数
格式:round(需要限制小数点的数, [限制位数]) # 限制小数点位数,不填位数默认为0
例如:round(5.132163565, 2) 结果:5.13
条件判断函数:
case when
格式:
case
when 条件1 then 值1
when 条件2 then 值2
when 条件3 then 值3
......
else 值n
end as 别名
执行流程:
1. case.when值选择语句, 首先会先判断条件1是否成立, 如果成立则执行对应的 值1, 整个case when语句结束.
2. 如果条件1不成立, 则会立即执行条件2, 看其是否成立, 成立走对应的值2, 然后整个语句结束.
3. 如果条件2不成立, 则会立即执行条件3...依次类推.
4. 如果所有的条件都不成立, 则执行 else语句, 然后整个case.when结束.
---------------------------------------------------------------------------------------------------------------------------------
if
格式: if(关系表达式, 值1, 值2)
执行流程: 先执行关系表达式, 看其结果是否成立, 成立则返回值1, 否则返回值2.
--------------------------------------------------------------------------------------------------------------------------------
相等时输出NULL
格式:nullif(值1, 值2) # 判断值1和值2是否相等,相等等于null,不等为值1
例如:nullif(3, 1) 结果:3
nullif(1,1) 结果:null
时间类函数:
当前时间--年月日
格式:curdate() # 获取当前时间,年月日
例如:select curdate(); 结果: 2024-08-02
------------------------------------------------------------------------------------------------------------------------------
当前时间--年月日
格式:curtime() # 获取当前时间,时分秒
例如:select curtime(); 结果: 18:23:17
-------------------------------------------------------------------------------------------------------------------------------
当前时间--年月日时分秒
格式:now() # 获取当前时间,年月日时分秒
例如:select now(); 结果:2024-08-08 18:16:49
---------------------------------------------------------------------------------------------------------------------------------
两个时间点间的天数
格式:datediff(时间A, 时间B) # 时间A - 时间B之间的天数
例如:select datediff('2021-01-01', '2020-02-01'); 结果:335
-----------------------------------------------------------------------------------------------------------------------------
指定减去年/月/日多少天
格式:subdate(时间, [interval] 数字 [day | month | year])
date:要从中减去时间间隔的原始日期或日期时间值.
expr:要减去的时间间隔的数量.
unit:时间间隔的单位,如DAY、MONTH、YEAR等。这个单位指定了expr所代表的时间间隔的类型.
例如:
select subdate(curdate(), weekday(curdate())); # 本周第一天
select subdate(curdate(), interval (weekday(curdate()) - 6) day); # 本周最后一天
select subdate('2000-01-19', interval (year('2000-01-19') - 2024) year); #将2000替换成了2024
---------------------------------------------------------------------------------------------------------------------------------