2016 - 2024

感恩一路有你

mysql聚合函数有哪些 如何使用MySQL中的实用函数及查询技巧?

浏览量:2356 时间:2023-05-02 14:43:35 作者:采采

如何使用MySQL中的实用函数及查询技巧?

长期以来,MySQL只具备汇总聚合函数的功能,如MAX、AVG等。,但是没有处理来自SQL层的每组聚合函数的功能。但是MySQL开放了UDF接口,你可以自己用C写UDF,增加了函数行的难度。

这种对每组进行扩展处理的功能称为窗口功能,有些数据库称为分析功能。

在MySQL 8.0之前,如果我们想要得到这样的结果,我们必须使用以下方法来实现:

1.会话变量

_concat函数组合

3.编写您自己的商店例程

接下来,我们将使用经典的学生/课程/成绩来演示窗口功能。

准备

学生桌

mysqlgt show cr:学生创建Tabl:创建表学生(sid int(10) unsigned NOT NULL,sname varchar(64) DEFAULT NULL,Primary key (SID))引擎Innodb DEFAULT Charset ut F8 MB 4 collate ut F8 MB 4 _ 0900 _ AI _ CI1 Set(0.00 sec)课程表中的行。

mysqlgt show create table cours:课程创建Tabl:创建表` course `( ` cid ` int(10)unsigned NOT NULL,` cname` varchar(64) DEFAULT NULL,Primary key (` cid `))引擎innodb DEFAULT charset ut F8 MB 4 collate ut F8 MB 4 _ 0900 _ ai _ ci1 set中的行(0.00秒)报表

mysqlgt显示创建表sco寄存器************************* 1。行***************************Tabl: score CR:创建表` score `( ` sid ` int(10)unsigned NOT NULL,` cid` int(10) unsigned NOT NULL,` score ` tinyint(3)unsigned DEFAULT NULL,PRIMARY KEY (`sid`, Cid `))引擎innodb默认字符集ut F8 MB 4 collateutf 8 MB 4 _ 0900 _ ai _ ci1行in set (0.00sec)测试数据。

MySQL gt select * from student-| sid | sname |-| 2011。宋武||| 201910004 |||| 201910005 |||| 201910006 |杨发财||| 201910007 |欧阳修||| 201910008 |郭靖||||| 201910009 |黄蓉| | | 2019 10 00 010。

mysqlgt select * from score---| sid | cid | score |-| 2019 10 001 | 2019 20 01 | 50 | | 2019 10 001 | 2019 20 02 | 88 | | 2019 10 001 | 2019 20 03 | 54 | | 2019 10 001 | 2019 20 04 | 43 | | 2019 10 001 | 2005 | 201992002 | 97 || 201910002 | 20192003 | 82 || 201910002 | 20192004 | 85 || 201910002 | 20192005 | 80 || 201910003 | 20192001 | 48 || 201910003 | 20192002 | 98 || 201910003 | 20192003 | 47 || 201910003 | 20192004 | 41 || 201910003 | 20192005 | 34 || 201910004 | 20192001 | 81 || 201910004 | 20192002 | 69 || 201910004 | 20192003 | 67 || 201910004 | 20192004 | 99 || 201910004 | 20192005 | 61 || 201910005 | 20192001 | 40 || 201910005 | 20192002 | 52 || 201910005 | 20192003 | 39 || 201910005 | 20192004 | 74 || 201910005 | 20192005 | 86 || 201910006 | 20192001 | 42 || 201910006 | 20192002 | 52 || 201910006 | 20192003 | 36 || 201910006 | 20192004 | 58 || 201910006 | 20192005 | 84 || 201910007 | 20192001 | 79 || 201910007 | 20192002 | 43 || 201910007 | 20192003 | 79 || 201910007 | 20192004 | 98 || 201910007 | 20192005 | 88 || 201910008 | 20192001 | 45 || 201910008 | 20192002 | 65 || 201910008 | 20192003 | 90 || 201910008 | 20192004 | 89 || 201910008 | 20192005 | 74 || 201910009 | 20192001 | 73 ||2019 10 009 | 2019 20 02 | 42 | | 2019 10 009 | 2019 20 03 | 95 | | 2019 10 009 | 2019 20 04 | 46 | | 2019 10 009 | 2019 20 05 | 45 | | 2019 10 010 10 | 2019 20 01 | 58 | | 2019 10 010 010 | 2019

mysqlgt select * from course--| cid | cname |-| 2019 20 01 | MySQL | | 2019 20 02 | Oracle | | 2019 20 03 | PostgreSQL | | | 2019 20 04 | MongoDB | | 2019 20 05 | DBLE |-MySQL 8.0之前的集合中的5行(0.00秒)。

比如我们要对前三名学生进行排名,我举个例子分别用session变量和group_concat函数来实现:

会话变量模式

每个组以初始值序列号和初始分组字段开始。

,,c . ranking _ score from学生a,课程b,(SELECTc。*,IF(@cid,@ rn : @ rn 1,@ rn : 1)AS ranking _ score,@ cid : AS tmpcidFROM(SELECT * fromscororder BY cid,score DESC) c,(: 0 rn,@ cid :)initialize _ table)c where c.ranking_score lt 3 order BY,c . ranking _ score

--| cname | sname | score | ranking _ score |-Dble |欧阳修| 88 | 2 || dble || 86 | 3 || mongodb || 99 | 1 || mongodb |欧阳修| 98 | 2 || mongodb |郭靖| 89 | 3 || mysql | Lisi | 100 | 1 |。Mysql || 81 | 2 || mysql |欧阳修| 79 | 3 ||甲骨文|宋武| 98 | 1 ||甲骨文|李四| 97 | 2 ||甲骨文|张三| 88 | 3 || postgresql |黄蓉| 95 | 1 || Postgresql |郭靖| 90 | 2 || postgresql | Lisi | 82 | 3 | -。

使用findinset内置函数返回序列号下标。

SELECT*FROM(,,,FIND_IN_SET(,)score_rankingFROMstudent a,course b,score c,(SELECTcid,GROUP _ CONCAT(score order BY score desc分隔符,)gpFROMscoreGROUP BY cid order BY score desc)d where BY,score _ ranking)ytt where score _ ranking lt 3;

--| cname | sname | score | score _ ranking |---DBLE |张三| 89 | 1 || dble |欧阳修| 88 | 2 || dble || 86 | 3 || mongodb || 99 | 1 || mongodb |欧阳修| 98 | 2 | 89 | 3 | | MySQL | Lisi | 100 | 1 | | MySQL || 81 | 2 || mysql |欧阳修| 79 | 3 ||甲骨文|宋武| 98 | 1 ||甲骨文|李斯| 97 | 2 ||甲骨文|张三| 88 | 3 | | | PostgreSQL |黄蓉| 95 | 1 || postgresql |郭靖| 90 | 2 || postgresql |李斯| 82 | 3 | -。

MySQL 8.0以后,提供了原生窗口函数支持,语法和大部分数据库一样,比如前面的例子:

使用row_number() over()直接检索排名。

mysqlgtSELECT*FROM(,,,row _ number()over(PARTITION BY desc)score _ rank FROM student AS a,course AS b,score AS c where)ytt where score _ rank lt 3

- cname | sname | score | score _ rank |。1 || dble |欧阳修| 88 | 2 || dble || 86 | 3 || mongodb || 99 | 1 || mongodb |欧阳修| 98 | 2 || mongodb |郭靖| 89 | 3 || mysql | Lisi | 100。Ysql || 81 | 2 || mysql |欧阳修| 79 | 3 ||甲骨文|宋武| 98 | 1 ||甲骨文|李四| 97 | 2 ||甲骨文|张三| 88 | 3 || postgresql |黄蓉| 95 | 1 || Postgresql |郭靖| 90 | 2 || postgresql | MySQL | 82 | 3 | -。

mysqlgtSELECT*FROM(,,,row _ number()over(PARTITION BY BY ASC)score _ ranking FROM student AS a,course AS b,score AS cWHERE IN (20192005,20192001)和lt 60) yttWHERE score_ranking lt 3

-cname | sname | score | scor

有关于软件测试,需要学习什么内容,学到什么程度可以找到工作?

软件测试要学的东西很多,包括测试理论,myaql数据库(或者其他数据库),linux操作系统,界面测试,移动测试,性能测试,python编程。

至少熟悉测试理论,测试流程(需求分析,测试计划,测试方案,测试用例等。)和测试方法(白盒测试)、灰盒测试、黑盒测试)、用例设计方法(边界值、等价类、场景方法、错误推测、因果图、决策表)

Mysql至少要知道基本的操作语句,比如insert into,delete,update,select。

Linux系统至少需要知道基本的命令(vi编辑器、文件权限修改、环境构建等...),接口测试需要了解http/https,tcp/ip的知识,get/post请求知识,学会使用jmeter工具。

性能测试需要学习loadrunner工具。

移动终端需要学习adb命令,

最后,自动化需要python编程(你不 不需要完全掌握,只需要知道一些基本的语法,比如:if,else,for,while…),那么selenium工具,unittest框架,元素定位,

掌握这些就行了!

函数 测试 学生 功能 甲骨文

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。