数据库练习001:SQL函数总结

张开发
2026/4/21 14:55:57 15 分钟阅读

分享文章

数据库练习001:SQL函数总结
max()取最大值忽略NULLmin()取最小值忽略NULLcount()统计总数加distinct可以计算去重总数count(1)和count(*)不忽略NULLcount列名忽略NULLavg()计算平均值忽略NULLsum()求总和忽略NULLround()指定保留多少位小数round(m, n)数值m保留n位小数case…when…then…else…end用法https://www.cnblogs.com/chenduzizhong/p/9590741.html简单函数CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END搜索函数CASE WHEN [expr] THEN [result1]…ELSE [default] END可以有多个判断各判断之间不需要逗号if(条件为真的取值为假的取值if(x,n,m)如果条件x为真则取n反之取mdate()提取合法的日期时间表达式中的日期部分day()提取合法的日期时间表达式中的daymonth()提取合法的日期时间表达式中的monthyear()提取合法的日期时间表达式中的yeardate_format(日期‘格式’)按指定格式提取对应时间日期中日期如date_format(date, ‘%Y%m’)last_day(日期)获取当月的最后一天的日期date_add(n, interval m day)在日期n上增加指定的时间间隔m天可以更换其他单位如second、yeardatediff(时间单位开始日期结束日期获取开始时间到结束时间之间的天数单位可以是时分秒年月日周等等但最终获取到的数值单位是天timestampdiff(时间单位开始时间结束时间获取开始时间到结束时间之间的时间差单位可以是时分秒年月日周等等最终获取到的数值单位就是指定的时间单位cast(表达式 as 数据类型)将某种数据类型的表达式显式转换为另一种数据类型数据类型包含整数(SIGNED)、浮点数 (DECIMAL)、日期时间(DATETIME)、日期(DATE)、时间(TIME)、字符型(CHAR())等等例如CAST(exam_cnt_rank_21 AS SIGNED)CAST(‘9.0’ AS DECIMAL)SELECT CAST(NOW() AS DATE)char_length(str)求字符串的长度不管汉字、数字、字母都算是一个字符length(str)求字符串的长度汉字算3个字符数字、字母都算是一个字符UCASE(str)把字段的值字符串所有字符转换为大写LCASE(str)把字段的值字符串所有字符转换为小写upper(str)把字段的值字符串所有字符转换为大写lower(str)把字段的值字符串所有字符转换为小写substring_index(str, 分隔符,n)对字符串str进行截取使用分隔符将字符串分割成多个字段截取至第n个字段如1是截取第1个字段3是截取1、2、3共3个字段含分隔符-1是截取倒数第1个字段-2是从倒1开始截取至倒2字段substr(str, i, n)从字符串str指定位置i往后截取n个字符i是正数时从开头开始算第i个字符负数时则从末尾开始算i等于0或1都是从第一个开始不指定n时截取后面所有字符https://www.cnblogs.com/dshore123/p/7805050.htmlconcat(str1,str2,str3…)将多个字符串连接成一个字符串通常是一个元组中的多个属性值任一个值为null就输出nullconcat_ws(分隔符str1,str2,str3…使用分隔符将多个字符串连接成一个字符串默认分隔符是逗号‘’group_concat()将分组中的值连接成一个字符串可以使用distinct去重使用order排序最后用separator指定分隔符默认是‘’row_number() over (partition by 列名1 order by 列名2先按列名1进行分组再在组内按列名2进行排序会得到序号相同的值也会因为顺序而得到不同的序号序号只可能是12345…rank() over (partition by 列名1 order by 列名2先按列名1进行分组再在组内按列名2进行排序会得到排名号相同的值有相同的序号但会按人数排名跳过序号序号可能是12245…dense_rank() over (partition by 列名1 order by 列名2先按列名1进行分组再在组内按列名2进行排序会得到排名号相同的值有相同的序号不会跳过序号序号可能是12234…percent_rank() over (partition by 列名1 order by 列名2先按列名1进行分组再在组内按列名2进行排序会得到0-1之间的数的百分比排名序号先按rank()规则得出序号然后计算(序号-1)/(总数-1)得出lag(列名1,n,默认值) over (partition by 列名 order by 列名分组排序后取当前行往上第n行默认为1的值列名1指定的那列如果值为null则取默认值如果没有默认值则取nulllead(列名1,n,默认值) over (partition by 列名 order by 列名分组排序后取当前行往下第n行默认为1的值列名1指定的那列如果值为null则取默认值如果没有默认值则取nullfirst_value(列名1) over (partition by 列名 order by 列名分组排序后取当前分组中的第一个值(列名1指定的那列last_value(列名1) over (partition by 列名 order by 列名分组排序后取当前分组中的第一个值(列名1指定的那列max(列名1) over (partition by 列名2)按列名2分组后求出列名1的最大值如max(score) over (partition by exam_id)min(列名1) over (partition by 列名2)按列名2分组后求出列名1的最小值如min(score) over (partition by exam_id)count() over (partition by … [order by…])count(start_time) over (partition by exam_id, date_month)得到每份试卷每月作答数count(start_time) over (partition by exam_id order by date_month)得到每份试卷截止当月的作答总数特殊的更新和删除replace into tablename values先检查是否有主键对应的数据如果有就先删掉旧数据再插入新数据否则就之间插入新数据。truncate table tablename删除表中的数据的同时重置自增主键。

更多文章