在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1.MySQL中关于函数的说明"概念":类似java、python中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名; "好处":Ⅰ隐藏了实现细节;Ⅱ提高代码的重用性; "调用":select 函数名(实参列表) [from 表]; "特点":Ⅰ叫什么(函数名);Ⅱ干什么(函数功能); "分类":Ⅰ单行函数;Ⅱ分组函数; "什么是单行函数:":作用于表中的每一行记录,一条记录出来一个结果; "什么是聚合函数:":作用于一行或者多行,最终返回一个结果; 2.单行函数分类字符函数; 数学函数; 日期函数; 其他函数; 流程控制函数; 3.字符函数1) 对于 对于 操作如下 : 2) 操作如下: 3) 操作如下: 4) 操作如下: 5) 操作如下: 6) 操作如下: 7) 操作如下: 8) 操作如下: 9) 操作如下: 10) 操作如下: 4.数学函数1) 操作如下: 2) 操作如下: 3) 操作如下: 4) 理解如下: "参考下面的示例图,体会如下文字" 2)D是0,直接去掉小数部分。 3)D是负数,操作的是小数点左侧的整数部分。 示例图: 操作如下: 5) 操作如下: 5.日期时间函数日期的含义:指的是我们常说的年、月、日。 时间的含义:指的是我们常说的时、分、秒。 在讲述下面函数之前,我们先补充一个知识,不同时间格式符表示什么含义呢? 1) 操作如下: 2) 操作如下: 3) 操作如下: 4)获取日期和时间中年、月、日、时、分、秒; 获取年份:year(); 获取月份:month(); 获取日:day(); 获取小时:hour(); 获取分钟:minute(); 获取秒数:second(); 5) 操作如下: 6) 操作如下: 7) 操作如下: 8) 操作如下: 9) 操作如下: 10) 操作如下: 11) 操作如下: 12) unit参数是确定(start_date,end_date)结果的单位,表示为整数,以下是有效单位: year:年份 month:月份 day:天 hour:小时 minute 分钟 second:秒 microsecond:微秒 week:周数 quarter:季度 YEAR:年份 操作如下: 6.其它常用系统函数7.流程控制函数1) 2) 3) case … when共有三种用法,我相信自己的总结会相当全面。希望大家一定要好好研究这几种用法,都是很有用的。 等值判断:类似于java中switch case的效果; 区间判断:类似于python中if-elif-else的效果; case … when和聚合函数联用; ① case … when用作等值判断的语法格式;
操作如下: ② case … when用作区间判断的语法格式;
操作如下: ③ case…when与聚合函数的联用 利用上述原始表,完成如下问题: -- 18、查询各科成绩最高分、最低分和平均分,以如下形式显示: 操作如下: select sc.c,cname, max(score) 最高分,min(score) 最低分,avg(score) 平均分, sum(case when score>60 then 1 else 0 end)/count(*) 及格率, sum(case when score>=70 and score<80 then 1 else 0 end)/count(*) 中等率, sum(case when score>=80 and score<90 then 1 else 0 end)/count(*) 优良率, sum(case when score>=90 then 1 else 0 end)/count(*) 优秀率 from sc left join course on sc.c = course.c group by sc.c; 结果如下: 8.聚合函数1)聚合函数的功能和分类;① 聚合函数的功能; 用作统计使用,又称为聚合函数或统计函数或组函数。 ② 聚合函数的分类; sum 求和avg 平均值max 最大值min 最小值count 计算个数 2)聚合函数的简单使用3)五个聚合函数中传入的参数,所支持的数据类型有哪些?mysql不是强类型的编程语言。也就是说,有些语句执行结果可能不报错,但是执行结果无实际意义,因此,我们也认为是不正确的。 ① 测试数据; "建表语句" create table test( id int primary key auto_increment, name varchar(20) not null, sal int, birth date)charset=utf8; "插入数据" insert into test(name,sal,birth) values ("Zoo",6500,'1993.3.20'), ("Hobby",4000,'1997.6.10'), ("Aline",5500,'2000.5.1'), ("Bob",10000,'2008.10.1'); ② sum()函数和avg()函数:传入整型/小数类型才有意义; 结论如下: sum()函数和avg()函数对于字符串类型、日期/时间类型的计算都没有太大意义。因此,sum()函数和avg()函数,我们只用来对小数类型和整型进行求和。 ③ max()函数和min()函数:传入整型/小数类型、日期/时间类型意义较大; 结论如下: max()和min()中传入的是"整型/小数类型",计算的是数值的 ④ count()函数:可以传入任何数据类型,但是碰到null要注意; 结论如下: count()函数可以传入任何数据类型,表示对行计数。 总结:
其实所有的分组函数都忽略null值的,但上面那个count()函数碰到null值要特别注意。 ⑤ count()函数碰到null值需要特别注意; 结论如下: 对于avg(sal)求平均值来说,(6500+4000+5500+10000)/4=6500。 对于后面这个sum()/count(*)求平均值来说,(6500+4000+5500+10000)/5=5200。 好好体会上述例子,有时候某人成绩虽然记录的是null,但是你仍然有5个人存在,所以你要考虑一下怎么使用合适的函数,达到你想要的结果。 ⑥ count(1),count(0)表示的是啥意思呢? 无论是sum(1),sum(0),count(1),count(0),avg(1),avg(0),原理都是一样的,相当于在原表中新增一列。 其次,我们知道where后面接的是【逻辑值】,当使用where 1和where 0原理也还是一样,也相当于在原表中新增一列。 我们只需要记住在mysql中:"非0即为true,0为false"。也就是说,下面的所有是1的地方,你可以换成任何非0数字,都是可以的。 原理图如下: 测试一下: ⑦ count(*)计数的效率问题; MYISAM存储引擎下,count(*)的效率高。INNODB存储引擎下,count(*)和count(1)的效率差不多,比count(字段)效率要高一些。综上所述:优先使用count(*)。 4)聚合函数和group by的使用“最重要”;关于这个知识点,我们将会在后面的知识点中进行讲述。在这里我们只需要记住一句话:当SQL语句中使用了group by分组函数后,select后面的字段必须是group by后面的字段 + 聚合函数的使用。 以上就是非常实用的MySQL函数全面总结详解示例分析的详细内容,更多关于MySQL函数的资料请关注极客世界其它相关文章! |
请发表评论